diff --git a/dfols/__init__.py b/dfols/__init__.py index b91fea0..78d73de 100644 --- a/dfols/__init__.py +++ b/dfols/__init__.py @@ -39,9 +39,11 @@ from __future__ import absolute_import, division, print_function, unicode_literals # DFO-LS version -__version__ = '1.5.4' +__version__ = '1.6' # Main solver & exit flags from .solver import * __all__ = ['solve', 'OptimResults'] +from .evaluations_database import * +__all__ += ['EvaluationDatabase'] diff --git a/dfols/controller.py b/dfols/controller.py index 4fee084..c68175d 100644 --- a/dfols/controller.py +++ b/dfols/controller.py @@ -414,6 +414,48 @@ def initialise_random_directions(self, number_of_samples, num_directions, params return None + def initialise_from_database(self, eval_database, number_of_samples, params): + # Here, eval_database has at least one entry, and the base index has already been used + # to evaluate (x0,r0), which has already been added to self.model + # Now, find exactly n feasible perturbations (either from database or new evals) and add them to the model + base_idx, perturbation_idx, new_perturbations = eval_database.select_starting_evals(self.delta, + xl=self.model.xbase + self.model.sl, + xu=self.model.xbase + self.model.su, + projections=self.model.projections, + tol=params("database.new_direction_tol"), + dykstra_max_iters=params("dykstra.max_iters"), + dykstra_tol=params("dykstra.d_tol")) + + # Add suitable pre-existing evaluations + for i, idx in enumerate(perturbation_idx): + module_logger.info("Adding pre-existing evaluation %g to initial model" % idx) + x, rx = eval_database.get_eval(idx) + self.model.change_point(i + 1, x - self.model.xbase, rx, -idx) # use eval_num = -idx + + if new_perturbations is not None: + num_perturbations = new_perturbations.shape[0] + module_logger.debug("Adding %g new evaluations to initial model" % num_perturbations) + for i in range(num_perturbations): + new_point = (eval_database.get_x(base_idx) - self.model.xbase) + new_perturbations[i,:] # new_perturbations[i,:] has length <= self.delta + + # Evaluate objective + x = self.model.as_absolute_coordinates(new_point) + rvec_list, obj_list, num_samples_run, exit_info = self.evaluate_objective(x, number_of_samples, params) + + # Handle exit conditions (f < min obj value or maxfun reached) + if exit_info is not None: + if num_samples_run > 0: + self.model.save_point(x, np.mean(rvec_list[:num_samples_run, :], axis=0), num_samples_run, + self.nx, x_in_abs_coords=True) + return exit_info # return & quit + + # Otherwise, add new results (increments model.npt_so_far) + self.model.change_point(len(perturbation_idx) + 1 + i, x - self.model.xbase, rvec_list[0, :], self.nx) # expect step, not absolute x + for j in range(1, num_samples_run): + self.model.add_new_sample(len(perturbation_idx) + 1 + i, rvec_extra=rvec_list[j, :]) + + return None + def add_new_direction_while_growing(self, number_of_samples, params, min_num_steps=0): num_steps = max(params('growing.num_new_dirns_each_iter'), min_num_steps) step_length = params('growing.delta_scale_new_dirns') * self.delta diff --git a/dfols/evaluations_database.py b/dfols/evaluations_database.py new file mode 100644 index 0000000..2486289 --- /dev/null +++ b/dfols/evaluations_database.py @@ -0,0 +1,208 @@ +""" +Class to create/store database of existing evaluations, and routines to select +existing evaluations to build an initial linear model +""" +import logging +import numpy as np + +from .util import apply_scaling, dykstra +from .trust_region import ctrsbox_geometry, trsbox_geometry + +__all__ = ['EvaluationDatabase'] + +module_logger = logging.getLogger(__name__) + + +# Class to store set of evaluations (x, rx) +class EvaluationDatabase(object): + def __init__(self, eval_list=None, starting_eval=None): + # eval_list is a list of tuples (x, rx) + self._evals = [] + if eval_list is not None: + for e in eval_list: + self._evals.append(e) + + # Which evaluation index should be the starting point of the optimization? + self.starting_eval = None + if starting_eval is not None and 0 <= starting_eval <= len(self._evals): + self.starting_eval = starting_eval + + def __len__(self): + return len(self._evals) + + def append(self, x, rx, make_starting_eval=False): + self._evals.append((x, rx)) + if make_starting_eval: + self.starting_eval = len(self) - 1 + + def set_starting_eval(self, index): + if 0 <= index < len(self): + self.starting_eval = index + else: + raise IndexError("Invalid index %g given current set of %g evaluations" % (index, len(self))) + + def get_starting_eval_idx(self): + if len(self) == 0: + raise RuntimeError("No evaluations available, no suitable starting evaluation ") + elif self.starting_eval is None: + module_logger.warning("Starting evaluation index not set, using most recently appended evaluation") + self.starting_eval = len(self) - 1 + + return self.starting_eval + + def get_eval(self, index): + # Return (x, rx) for given index + if 0 <= index < len(self): + return self._evals[index][0], self._evals[index][1] + else: + raise IndexError("Invalid index %g given current set of %g evaluations" % (index, len(self))) + + def get_x(self, index): + return self.get_eval(index)[0] + + def get_rx(self, index): + return self.get_eval(index)[1] + + def apply_scaling(self, scaling_changes): + # Adjust all input x values based on scaling + if scaling_changes is not None: + for i in range(len(self)): + x, rx = self._evals[i] + self._evals[i] = (apply_scaling(x, scaling_changes), rx) + return + + def select_starting_evals(self, delta, xl=None, xu=None, projections=[], tol=1e-8, + dykstra_max_iters=100, dykstra_tol=1e-10): + # Given a database 'evals' with prescribed starting index, and initial trust-region radius delta > 0 + # determine a subset of the database to use + + # The bounds xl <= x <= xu and projection list are used to determine where to evaluate any new points + # (ensuring they are feasible) + + if delta <= 0.0: + raise RuntimeError("delta must be strictly positive") + if len(self) == 0: + raise RuntimeError("Need at least one evaluation to select starting evaluations") + + base_idx = self.get_starting_eval_idx() + xbase = self.get_x(self.get_starting_eval_idx()) + n = len(xbase) + module_logger.debug("Selecting starting evaluations from existing database") + module_logger.debug("Have %g evaluations to choose from" % len(self)) + module_logger.debug("Using base index %g" % base_idx) + + # For linear interpolation, we will use the matrix + # M = [[1, 0], [0, L]] where L has rows (xi-xbase)/delta + # So, just build a large matrix Lfull with everything + n_perturbations = len(self) - 1 + Lfull = np.zeros((n_perturbations, n)) + row_idx = 0 + for i in range(n_perturbations + 1): + if i == base_idx: + continue + Lfull[row_idx, :] = (self.get_x(i) - xbase) / delta # Lfull[i,:] = (xi-xbase) / delta + row_idx += 1 + + xdist = np.linalg.norm(Lfull, axis=1) # xdist[i] = ||Lfull[i,:]|| = ||xi-xbase|| / delta + # module_logger.debug("xdist =", xdist) + + # We ideally want xdist ~ 1, so reweight these distances based on that (large xdist_reweighted --> xdist ~ 1 --> good) + xdist_reweighted = 1.0 / np.maximum(xdist, 1.0 / xdist) + # module_logger.debug("xdist_reweighted =", xdist_reweighted) + + if n_perturbations == 0: + module_logger.debug("Only one evaluation available, just selecting that") + return base_idx, [], delta * np.eye(n) + + # Now, find as many good perturbations as we can + # Good = not too far from xbase (relative to delta) and sufficiently linearly independent + # from other selected perturbations (i.e. Lfull[perturbation_idx,:] well-conditioned + # and len(perturbation_idx) <= n + perturbation_idx = [] # what point indices to use as perturbations + + for iter in range(min(n_perturbations, n)): + # Add one more good perturbation, if available + # Note: can only add at most the number of available perturbations, or n perturbations, whichever is smaller + if iter == 0: + # First perturbation: every direction is equally good, so pick the point closest to the + # trust-region boundary + idx = int(np.argmax(xdist_reweighted)) + module_logger.debug("Adding index %g with ||xi-xbase|| / delta = %g" % (idx if idx < base_idx else idx+1, xdist[idx])) + perturbation_idx.append(idx) + else: + Q, R = np.linalg.qr(Lfull[perturbation_idx, :].T, mode='reduced') + # module_logger.debug("Current perturbation_idx =", perturbation_idx) + L_rem = Lfull @ (np.eye(n) - Q @ Q.T) # part of (xi-xbase)/delta orthogonal to current perturbations + # rem_size = fraction of original length ||xi-xbase||/delta that is orthogonal to current perturbations + # all entries are in [0,1], and is zero for already selected perturbations + rem_size = np.linalg.norm(L_rem, axis=1) / xdist + rem_size[perturbation_idx] = 0 # ensure this holds exactly + # module_logger.debug("rem_size =", rem_size) + # module_logger.debug("rem_size * xdist_reweighted =", rem_size * xdist_reweighted) + + # We want a point with large rem_size and xdist ~ 1 (i.e. xdist_reweighted large) + idx = int(np.argmax(rem_size * xdist_reweighted)) + if rem_size[idx] * xdist_reweighted[idx] > tol: + # This ensures new perturbation is sufficiently linearly independent of existing perturbations + # (and also ensures idx hasn't already been chosen) + module_logger.debug("Adding index %g" % (idx if idx < base_idx else idx+1)) + perturbation_idx.append(idx) + else: + module_logger.debug("No more linearly independent directions, quitting") + break + + # Find new linearly independent directions + if len(perturbation_idx) < n: + module_logger.debug("Selecting %g new linearly independent directions" % (n - len(perturbation_idx))) + Q, _ = np.linalg.qr(Lfull[perturbation_idx, :].T, mode='complete') + new_perturbations = delta * Q[:, len(perturbation_idx):].T + + # Make perturbations feasible w.r.t. xl <= x <= xu and projections + # Note: if len(projections) > 0, then the projection list *already* includes bounds + # Don't need to make pre-existing evaluations feasible, since we already have r(x) for these + + # Start construction of interpolation matrix for later + L = np.zeros((n, n), dtype=float) + L[:len(perturbation_idx), :] = Lfull[perturbation_idx, :] + L[len(perturbation_idx):, :] = new_perturbations / delta + + # Since we already have a full set of linearly independent directions, + # we do this by moving each infeasible perturbation to a geometry-improving location + for i in range(new_perturbations.shape[0]): + xnew = xbase + new_perturbations[i, :] + # Check feasibility + if len(projections) == 0: + # Bounds only + feasible = np.all(xnew >= xl) and np.all(xnew <= xu) + else: + # Projections + xnew_C = dykstra(projections, xnew, max_iter=dykstra_max_iters, tol=dykstra_tol) + feasible = np.linalg.norm(xnew - xnew_C) < dykstra_tol + + if feasible: + # Skip feasible points, nothing to do + continue + + # If infeasible, build Lagrange polynomial and move to geometry-improving location in B(xbase,delta) + # which will automatically be feasible + module_logger.debug("Moving default %g-th new perturbation to ensure feasibility" % i) + c = 0.0 # Lagrange polynomial centered at xbase + ei = np.zeros((n,), dtype=float) + ei[len(perturbation_idx) + i] = 1.0 + g = np.linalg.solve(L, ei) / delta # divide by delta because L is scaled by 1/delta + if len(projections) == 0: + new_perturbations[i, :] = trsbox_geometry(xbase, c, g, xl, xu, delta) + else: + new_perturbations[i, :] = ctrsbox_geometry(xbase, c, g, projections, delta) + + # Update L after replacement + L[len(perturbation_idx) + i, :] = new_perturbations[i,:] / delta + else: + module_logger.debug("Full set of directions found, no need for new evaluations") + new_perturbations = None + + # perturbation_idx in [0, ..., n_perturbations-1], reset to be actual indices + for i in range(len(perturbation_idx)): + if perturbation_idx[i] >= base_idx: + perturbation_idx[i] += 1 + return base_idx, perturbation_idx, new_perturbations diff --git a/dfols/params.py b/dfols/params.py index 7fe9ac2..d34c5f1 100644 --- a/dfols/params.py +++ b/dfols/params.py @@ -122,6 +122,9 @@ def __init__(self, n, npt, maxfun, objfun_has_noise=False): self.params["func_tol.tr_step"] = 1-1e-1 self.params["func_tol.max_iters"] = 500 self.params["sfista.max_iters_scaling"] = 2.0 + + # Evaluation database + self.params["database.new_direction_tol"] = 1e-8 self.params_changed = {} for p in self.params: @@ -284,6 +287,8 @@ def param_type(self, key, npt): type_str, nonetype_ok, lower, upper = 'int', False, 0, None elif key == "sfista.max_iters_scaling": type_str, nonetype_ok, lower, upper = 'float', False, 1.0, None + elif key == "database.new_direction_tol": + type_str, nonetype_ok, lower, upper = 'float', False, 0.0, None else: assert False, "ParameterList.param_type() has unknown key: %s" % key return type_str, nonetype_ok, lower, upper diff --git a/dfols/solver.py b/dfols/solver.py index f61d7da..cd099e6 100644 --- a/dfols/solver.py +++ b/dfols/solver.py @@ -39,6 +39,7 @@ from .controller import * from .diagnostic_info import * +from .evaluations_database import * from .params import * from .util import * @@ -70,13 +71,16 @@ def __init__(self, xmin, rmin, objmin, jacmin, nf, nx, nruns, exit_flag, exit_ms self.EXIT_TR_INCREASE_ERROR = EXIT_TR_INCREASE_ERROR self.EXIT_LINALG_ERROR = EXIT_LINALG_ERROR self.EXIT_FALSE_SUCCESS_WARNING = EXIT_FALSE_SUCCESS_WARNING + self.max_resid_length_print = 20 # don't print self.resid in __str__ if length >= this value + self.max_jac_length_print = 40 # don't print self.jacobian in __str__ if length >= this value + def __str__(self): # Result of calling print(soln) output = "****** DFO-LS Results ******\n" if self.flag != self.EXIT_INPUT_ERROR: output += "Solution xmin = %s\n" % str(self.x) - if len(self.resid) < 100: + if len(self.resid) < self.max_resid_length_print: output += "Residual vector = %s\n" % str(self.resid) else: output += "Not showing residual vector because it is too long; check self.resid\n" @@ -84,7 +88,7 @@ def __str__(self): output += "Needed %g objective evaluations (at %g points)\n" % (self.nf, self.nx) if self.nruns > 1: output += "Did a total of %g runs\n" % self.nruns - if self.jacobian is not None and np.size(self.jacobian) < 200: + if self.jacobian is not None and np.size(self.jacobian) < self.max_jac_length_print: output += "Approximate Jacobian = %s\n" % str(self.jacobian) elif self.jacobian is None: output += "No Jacobian returned\n" @@ -93,7 +97,7 @@ def __str__(self): if self.diagnostic_info is not None: output += "Diagnostic information available; check self.diagnostic_info\n" output += "Solution xmin was evaluation point %g\n" % self.xmin_eval_num - if self.jacmin_eval_nums is not None and len(self.jacmin_eval_nums) < 100: + if self.jacmin_eval_nums is not None and len(self.jacmin_eval_nums) < self.max_resid_length_print: output += "Approximate Jacobian formed using evaluation points %s\n" % str(self.jacmin_eval_nums) elif self.jacmin_eval_nums is None: output += "Approximate Jacobian not formed using problem information, disregard\n" @@ -152,58 +156,77 @@ def from_dict(soln_dict): def solve_main(objfun, x0, argsf, xl, xu, projections, npt, rhobeg, rhoend, maxfun, nruns_so_far, nf_so_far, nx_so_far, nsamples, params, diagnostic_info, scaling_changes, h=None, lh=None, argsh=(), prox_uh=None, argsprox=None, r0_avg_old=None, r0_nsamples_old=None, default_growing_method_set_by_user=None, do_logging=True, print_progress=False): + + if type(x0) == EvaluationDatabase: + x0_is_eval_database = True + x0_vec = x0.get_x(x0.get_starting_eval_idx()) + else: + x0_vec = x0 + x0_is_eval_database = False + n = len(x0_vec) + # Evaluate at x0 (keep nf, nx correct and check for f < 1e-12) # The hard bit is determining what m = len(r0) should be, and allocating memory appropriately if r0_avg_old is None: - number_of_samples = max(nsamples(rhobeg, rhobeg, 0, nruns_so_far), 1) - # Evaluate the first time... - nf = nf_so_far + 1 - nx = nx_so_far + 1 - r0, obj0 = eval_least_squares_with_regularisation(objfun, remove_scaling(x0, scaling_changes), h, - argsf=argsf, argsh=argsh, verbose=do_logging, eval_num=nf, pt_num=nx, - full_x_thresh=params("logging.n_to_print_whole_x_vector"), - check_for_overflow=params("general.check_objfun_for_overflow")) - m = len(r0) - - # Now we have m, we can evaluate the rest of the times - rvec_list = np.zeros((number_of_samples, m)) - obj_list = np.zeros((number_of_samples,)) - rvec_list[0, :] = r0 - obj_list[0] = obj0 - num_samples_run = 1 exit_info = None + if x0_is_eval_database: + # We have already got r(x0), so just extract this information + nf = nf_so_far + nx = nx_so_far + num_samples_run = 1 + r0_avg = x0.get_rx(x0.get_starting_eval_idx()) + m = len(r0_avg) + module_logger.info("Using pre-existing evaluation %g as starting point" % (x0.get_starting_eval_idx())) + else: + number_of_samples = max(nsamples(rhobeg, rhobeg, 0, nruns_so_far), 1) + # Evaluate the first time... + nf = nf_so_far + 1 + nx = nx_so_far + 1 + r0, obj0 = eval_least_squares_with_regularisation(objfun, remove_scaling(x0_vec, scaling_changes), h, + argsf=argsf, argsh=argsh, verbose=do_logging, eval_num=nf, pt_num=nx, + full_x_thresh=params("logging.n_to_print_whole_x_vector"), + check_for_overflow=params("general.check_objfun_for_overflow")) + m = len(r0) + + # Now we have m, we can evaluate the rest of the times + rvec_list = np.zeros((number_of_samples, m)) + obj_list = np.zeros((number_of_samples,)) + rvec_list[0, :] = r0 + obj_list[0] = obj0 + num_samples_run = 1 + + for i in range(1, number_of_samples): # skip first eval - already did this + if nf >= maxfun: + exit_info = ExitInformation(EXIT_MAXFUN_WARNING, "Objective has been called MAXFUN times") + nruns_so_far += 1 + break # stop evaluating at x0 - for i in range(1, number_of_samples): # skip first eval - already did this - if nf >= maxfun: - exit_info = ExitInformation(EXIT_MAXFUN_WARNING, "Objective has been called MAXFUN times") - nruns_so_far += 1 - break # stop evaluating at x0 + nf += 1 + # Don't increment nx for x0 - we did this earlier + rvec_list[i, :], obj_list[i] = eval_least_squares_with_regularisation(objfun, remove_scaling(x0_vec, scaling_changes), h, + argsf=argsf, argsh=argsh, verbose=do_logging, eval_num=nf, pt_num=nx, + full_x_thresh=params("logging.n_to_print_whole_x_vector"), + check_for_overflow=params("general.check_objfun_for_overflow")) + num_samples_run += 1 - nf += 1 - # Don't increment nx for x0 - we did this earlier - rvec_list[i, :], obj_list[i] = eval_least_squares_with_regularisation(objfun, remove_scaling(x0, scaling_changes), h, - argsf=argsf, argsh=argsh, verbose=do_logging, eval_num=nf, pt_num=nx, - full_x_thresh=params("logging.n_to_print_whole_x_vector"), - check_for_overflow=params("general.check_objfun_for_overflow")) - num_samples_run += 1 + r0_avg = np.mean(rvec_list[:num_samples_run, :], axis=0) - r0_avg = np.mean(rvec_list[:num_samples_run, :], axis=0) # NOTE: modify objvalue here if h is None: if sumsq(r0_avg) <= params("model.abs_tol"): exit_info = ExitInformation(EXIT_SUCCESS, "Objective is sufficiently small") else: - if sumsq(r0_avg) + h(remove_scaling(x0, scaling_changes), *argsh)<= params("model.abs_tol"): + if sumsq(r0_avg) + h(remove_scaling(x0_vec, scaling_changes), *argsh)<= params("model.abs_tol"): exit_info = ExitInformation(EXIT_SUCCESS, "Objective is sufficiently small") if exit_info is not None: xmin_eval_num = 0 jacmin_eval_nums = np.array([0], dtype=int) - return x0, r0_avg, sumsq(r0_avg), None, num_samples_run, nf, nx, nruns_so_far+1, exit_info, diagnostic_info, xmin_eval_num, jacmin_eval_nums + return x0_vec, r0_avg, sumsq(r0_avg), None, num_samples_run, nf, nx, nruns_so_far+1, exit_info, diagnostic_info, xmin_eval_num, jacmin_eval_nums else: # have old r0 information (e.g. from previous restart), use this instead - # m = len(r0_avg_old) + m = len(r0_avg_old) r0_avg = r0_avg_old num_samples_run = r0_nsamples_old nf = nf_so_far @@ -213,7 +236,7 @@ def solve_main(objfun, x0, argsf, xl, xu, projections, npt, rhobeg, rhoend, maxf if default_growing_method_set_by_user is not None and (not default_growing_method_set_by_user): # If m>=n, the default growing method (use_full_rank_interp) is best # However, this can fail for m= n+1 finished_growing = (control.model.npt() >= control.model.num_pts) # have we finished growing the initial set yet? # Save list of last N successful steps: whether they failed to be an improvement over fsave @@ -942,8 +972,16 @@ def solve_main(objfun, x0, argsf, xl, xu, projections, npt, rhobeg, rhoend, maxf def solve(objfun, x0, h=None, lh=None, prox_uh=None, argsf=(), argsh=(), argsprox=(), bounds=None, projections=[], npt=None, rhobeg=None, rhoend=1e-8, maxfun=None, nsamples=None, user_params=None, objfun_has_noise=False, scaling_within_bounds=False, do_logging=True, print_progress=False): - x0 = x0.astype(float) - n = len(x0) + + if type(x0) == EvaluationDatabase: + assert len(x0) > 0, "evaluation database x0 cannot be empty" + assert 0 <= x0.get_starting_eval_idx() < len(x0), "evaluation database must have valid starting index set" + x0_is_eval_database = True + n = len(x0.get_x(x0.get_starting_eval_idx())) + else: + x0 = np.array(x0).astype(float) + n = len(x0) + x0_is_eval_database = False # Set missing inputs (if not specified) to some sensible defaults if bounds is None: @@ -969,7 +1007,8 @@ def solve(objfun, x0, h=None, lh=None, prox_uh=None, argsf=(), argsh=(), argspro if npt is None: npt = n + 1 if rhobeg is None: - rhobeg = 0.1 if scaling_within_bounds else 0.1 * max(np.max(np.abs(x0)), 1.0) + x0_norm = np.max(np.abs(x0.get_x(x0.get_starting_eval_idx()))) if x0_is_eval_database else np.max(np.abs(x0)) + rhobeg = 0.1 if scaling_within_bounds else 0.1 * max(x0_norm, 1.0) if maxfun is None: maxfun = min(100 * (n + 1), 1000) # 100 gradients, capped at 1000 if nsamples is None: @@ -1004,7 +1043,10 @@ def solve(objfun, x0, h=None, lh=None, prox_uh=None, argsf=(), argsh=(), argspro scale = xu - xl scaling_changes = (shift, scale) - x0 = apply_scaling(x0, scaling_changes) + if x0_is_eval_database: + x0.apply_scaling(scaling_changes) + else: + x0 = apply_scaling(x0, scaling_changes) xl = apply_scaling(xl, scaling_changes) xu = apply_scaling(xu, scaling_changes) @@ -1033,13 +1075,19 @@ def solve(objfun, x0, h=None, lh=None, prox_uh=None, argsf=(), argsh=(), argspro if exit_info is None and maxfun <= 0: exit_info = ExitInformation(EXIT_INPUT_ERROR, "maxfun must be strictly positive") - if exit_info is None and np.shape(x0) != (n,): - exit_info = ExitInformation(EXIT_INPUT_ERROR, "x0 must be a vector") + if exit_info is None: + if x0_is_eval_database: + for i in range(len(x0)): + if np.shape(x0.get_x(i)) != (n,): + exit_info = ExitInformation(EXIT_INPUT_ERROR, "All input vectors x0 must have the same shape") + else: + if np.shape(x0) != (n,): + exit_info = ExitInformation(EXIT_INPUT_ERROR, "x0 must be a vector") - if exit_info is None and np.shape(x0) != np.shape(xl): + if exit_info is None and np.shape(xl) != (n,): exit_info = ExitInformation(EXIT_INPUT_ERROR, "lower bounds must have same shape as x0") - if exit_info is None and np.shape(x0) != np.shape(xu): + if exit_info is None and np.shape(xu) != (n,): exit_info = ExitInformation(EXIT_INPUT_ERROR, "upper bounds must have same shape as x0") if exit_info is None and np.min(xu - xl) < 2.0 * rhobeg: @@ -1090,22 +1138,24 @@ def solve(objfun, x0, h=None, lh=None, prox_uh=None, argsf=(), argsh=(), argspro return results # Enforce arbitrary constraint bounds on x0 - if projections: - xp = dykstra(projections,x0,max_iter=params("dykstra.max_iters"),tol=params("dykstra.d_tol")) - if not np.allclose(xp,x0): - warnings.warn("x0 not feasible w.r.t given constraints, adjusting", RuntimeWarning) - x0 = xp.copy() - - # Enforce lower & upper bounds on x0 - idx = (x0 < xl) - if np.any(idx): - warnings.warn("x0 below lower bound, adjusting", RuntimeWarning) - x0[idx] = xl[idx] - - idx = (x0 > xu) - if np.any(idx): - warnings.warn("x0 above upper bound, adjusting", RuntimeWarning) - x0[idx] = xu[idx] + if not x0_is_eval_database: + # Don't need to enforce any constraints for pre-existing evaluations (since we already have the objective value) + if projections: + xp = dykstra(projections,x0,max_iter=params("dykstra.max_iters"),tol=params("dykstra.d_tol")) + if not np.allclose(xp,x0): + warnings.warn("x0 not feasible w.r.t given constraints, adjusting", RuntimeWarning) + x0 = xp.copy() + + # Enforce lower & upper bounds on x0 + idx = (x0 < xl) + if np.any(idx): + warnings.warn("x0 below lower bound, adjusting", RuntimeWarning) + x0[idx] = xl[idx] + + idx = (x0 > xu) + if np.any(idx): + warnings.warn("x0 above upper bound, adjusting", RuntimeWarning) + x0[idx] = xu[idx] # Call main solver (first time) diagnostic_info = DiagnosticInfo() diff --git a/docs/build/doctrees/advanced.doctree b/docs/build/doctrees/advanced.doctree index fc38b0a..ff74e83 100755 Binary files a/docs/build/doctrees/advanced.doctree and b/docs/build/doctrees/advanced.doctree differ diff --git a/docs/build/doctrees/contributors.doctree b/docs/build/doctrees/contributors.doctree index fc2153b..3774c3b 100644 Binary files a/docs/build/doctrees/contributors.doctree and b/docs/build/doctrees/contributors.doctree differ diff --git a/docs/build/doctrees/diagnostic.doctree b/docs/build/doctrees/diagnostic.doctree index d72c0c0..aa78645 100755 Binary files a/docs/build/doctrees/diagnostic.doctree and b/docs/build/doctrees/diagnostic.doctree differ diff --git a/docs/build/doctrees/environment.pickle b/docs/build/doctrees/environment.pickle index 2cab4b4..dad2380 100755 Binary files a/docs/build/doctrees/environment.pickle and b/docs/build/doctrees/environment.pickle differ diff --git a/docs/build/doctrees/history.doctree b/docs/build/doctrees/history.doctree index 4ef2fa0..4ee9c3a 100755 Binary files a/docs/build/doctrees/history.doctree and b/docs/build/doctrees/history.doctree differ diff --git a/docs/build/doctrees/index.doctree b/docs/build/doctrees/index.doctree index 62b4d6e..024f58f 100755 Binary files a/docs/build/doctrees/index.doctree and b/docs/build/doctrees/index.doctree differ diff --git a/docs/build/doctrees/info.doctree b/docs/build/doctrees/info.doctree index 30b630f..816ef9e 100755 Binary files a/docs/build/doctrees/info.doctree and b/docs/build/doctrees/info.doctree differ diff --git a/docs/build/doctrees/install.doctree b/docs/build/doctrees/install.doctree index b2f86a4..792439a 100755 Binary files a/docs/build/doctrees/install.doctree and b/docs/build/doctrees/install.doctree differ diff --git a/docs/build/doctrees/userguide.doctree b/docs/build/doctrees/userguide.doctree index 1386dc4..955921e 100755 Binary files a/docs/build/doctrees/userguide.doctree and b/docs/build/doctrees/userguide.doctree differ diff --git a/docs/build/html/.buildinfo b/docs/build/html/.buildinfo index 0849250..77669f2 100644 --- a/docs/build/html/.buildinfo +++ b/docs/build/html/.buildinfo @@ -1,4 +1,4 @@ # Sphinx build info version 1 -# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. -config: 412cd91ff985b9489bd71148f8919cdf +# This file records the configuration used when building these files. When it is not found, a full rebuild will be done. +config: e7c5306abb68a1486dd06854499b3f9f tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs/build/html/.buildinfo.bak b/docs/build/html/.buildinfo.bak new file mode 100644 index 0000000..0849250 --- /dev/null +++ b/docs/build/html/.buildinfo.bak @@ -0,0 +1,4 @@ +# Sphinx build info version 1 +# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. +config: 412cd91ff985b9489bd71148f8919cdf +tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs/build/html/_sources/contributors.rst.txt b/docs/build/html/_sources/contributors.rst.txt index 48212de..2732936 100644 --- a/docs/build/html/_sources/contributors.rst.txt +++ b/docs/build/html/_sources/contributors.rst.txt @@ -3,7 +3,7 @@ Contributors Main author ----------- -* `Lindon Roberts `_ (University of Sydney) +* `Lindon Roberts `_ (University of Melbourne) Contributors ------------ diff --git a/docs/build/html/_sources/history.rst.txt b/docs/build/html/_sources/history.rst.txt index fd82d86..114d3d5 100644 --- a/docs/build/html/_sources/history.rst.txt +++ b/docs/build/html/_sources/history.rst.txt @@ -84,3 +84,8 @@ Version 1.5.4 (11 Feb 2025) --------------------------- * Bugfix when printing results from a run which terminated early * Add ability to save/load results to/from a dictionary + +Version 1.6 (10 Sep 2025) +------------------------- +* Allow use of evaluation database as :code:`x0` to reduce number of objective evaluations required in initialization phase +* When printing solution object, reduce the maximum length of residual/Jacobian vectors that are fully displayed diff --git a/docs/build/html/_sources/userguide.rst.txt b/docs/build/html/_sources/userguide.rst.txt index 0e72ab8..7f4ceac 100644 --- a/docs/build/html/_sources/userguide.rst.txt +++ b/docs/build/html/_sources/userguide.rst.txt @@ -33,6 +33,11 @@ The input :code:`objfun` is a Python function which takes an input :math:`x\in\m The input :code:`x0` is the starting point for the solver, and (where possible) should be set to be the best available estimate of the true solution :math:`x_{min}\in\mathbb{R}^n`. It should be specified as a one-dimensional NumPy array (i.e. with :code:`x0.shape == (n,)`). As DFO-LS is a local solver, providing different values for :code:`x0` may cause it to return different solutions, with possibly different objective values. +In newer version of DFO-LS (v1.6 onwards), the input :code:`x0` may instead by an instance of a :code:`dfols.EvaluationDatabase`, which stores a collection +of previously evaluated points and their associated vectors of residuals. One of these points is designated the starting point for the solver, and the other +points may be used by DFO-LS to build its first approximation to :code:`objfun`, reducing the number of evaluations required to begin the main iteration. +See the example below for more details for how to use this functionality. + The output of :code:`dfols.solve` is an object containing: * :code:`soln.x` - an estimate of the solution, :math:`x_{min}\in\mathbb{R}^n`, a one-dimensional NumPy array. @@ -436,6 +441,164 @@ The solution found by DFO-LS is: We can see that 3 of the 5 components of the solution are very close to zero. Note that many LASSO-type algorithms can produce a solution with many entries being exactly zero, but DFO-LS can only make them very small (related to how it calculates a new point with trust-region constraints). +Using Initial Evaluation Database +--------------------------------- +Since DFO-LS v1.6, the input :code:`x0` may instead be an instance of a :code:`dfols.EvaluationDatabase` class containing a collection of previously evaluated +points and their associated vectors of residuals. One of these points must be flagged as the starting point for the solver (otherwise, the most recently added +point is used). DFO-LS will automaticaly select some (but possibly none/all) of the other points to help build its first internal approximation to the objective, +which reduces the number of times the objective must be evaluated during the initialization phase, before the main algorithm can begin. + +For example, suppose we want to use DFO-LS to minimize the Watson test function (Problem 20 from [MGH1981]_). Using the standard starting point, our code looks like + + .. code-block:: python + + import numpy as np + import dfols + + # Define the objective function + def watson(x): + n = len(x) + m = 31 + fvec = np.zeros((m,), dtype=float) + for i in range(1, 30): # i=1,...,29 + div = float(i) / 29.0 + s1 = 0.0 + dx = 1.0 + for j in range(2, n + 1): # j = 2,...,n + s1 = s1 + (j - 1) * dx * x[j - 1] + dx = div * dx + s2 = 0.0 + dx = 1.0 + for j in range(1, n + 1): # j = 1,...,n + s2 = s2 + dx * x[j - 1] + dx = div * dx + fvec[i - 1] = s1 - s2 ** 2 - 1.0 + fvec[29] = x[0] + fvec[30] = x[1] - x[0] ** 2 - 1.0 + return fvec + + # Define the starting point + n = 6 + x0 = 0.5 * np.ones((n,), dtype=float) + + # Show extra output to demonstrate the impact of using an initial evaluation database + import logging + logging.basicConfig(level=logging.INFO, format='%(message)s') + + # Call DFO-LS + soln = dfols.solve(watson, x0) + + # Display output + print(soln) + +In the output of this code, we can check that DFO-LS finds the unique minimizer of this function. We can also see that before the main loop can begin, +DFO-LS needs to evaluate the objective at the given starting point, and 6 extra points (since this problem has 6 variables to be minimized): + + .. code-block:: none + + Function eval 1 at point 1 has obj = 16.4308311759923 at x = [...] + Initialising (coordinate directions) + Function eval 2 at point 2 has obj = 28.9196967094733 at x = [...] + Function eval 3 at point 3 has obj = 22.0866904737059 at x = [...] + Function eval 4 at point 4 has obj = 20.6560889343479 at x = [...] + Function eval 5 at point 5 has obj = 19.2914312375462 at x = [...] + Function eval 6 at point 6 has obj = 18.0373781384725 at x = [...] + Function eval 7 at point 7 has obj = 16.8946356501339 at x = [...] + Beginning main loop + Function eval 8 at point 8 has obj = 8.45207899459595 at x = [...] + Function eval 9 at point 9 has obj = 2.54949692496583 at x = [...] + ... + Function eval 90 at point 90 has obj = 0.00228767005355292 at x = [...] + Did a total of 1 run(s) + + ****** DFO-LS Results ****** + Solution xmin = [-0.01572509 1.01243487 -0.23299162 1.26043004 -1.51372886 0.99299641] + Not showing residual vector because it is too long; check self.resid + Objective value f(xmin) = 0.002287670054 + Needed 90 objective evaluations (at 90 points) + Not showing approximate Jacobian because it is too long; check self.jacobian + Solution xmin was evaluation point 89 + Approximate Jacobian formed using evaluation points [87 85 76 89 86 88 84] + Exit flag = 0 + Success: rho has reached rhoend + **************************** + +Instead of this, we can build a database of points where we have previously evaluated the objective, marking one of them as the starting point +for the algorithm. DFO-LS will then select some/all (but possibly none) of the other points and use them as initial evaluations, allowing it to begin +the main loop faster. In general, DFO-LS will select points that are: + +* Not too close/far from the selected starting point (relative to the initial trust-region radius, input :code:`rhobeg`) +* Not in similar directions (relative to the selected starting point) to other selected initial points. For example, if several points differ from + the selected starting point in only the first variable, at most one of these will be selected. + +The following code demonstrates how an evaluation database may be constructed and given to DFO-LS: + + .. code-block:: python + + # Assuming numpy and dfols already imported, watson function already defined + + # Build a database of evaluations + eval_db = dfols.EvaluationDatabase() + + # Define the starting point and add it to the database + n = 6 + x0 = 0.5 * np.ones((n,), dtype=float) + eval_db.append(x0, watson(x0), make_starting_eval=True) + # make_starting_eval=True --> use this point as the starting point for DFO-LS + + # Add other points to the database + # Note: x0, x1 and x2 are colinear, so at least one of x1 and x2 will not be included in the initial model + x1 = np.ones((n,), dtype=float) + x2 = np.zeros((n,), dtype=float) + x3 = np.arange(n).astype(float) + eval_db.append(x1, watson(x1)) + eval_db.append(x2, watson(x2)) + eval_db.append(x3, watson(x3)) + + # Show extra output to demonstrate the impact of using an initial evaluation database + import logging + logging.basicConfig(level=logging.INFO, format='%(message)s') + + # Call DFO-LS + soln = dfols.solve(watson, x0) + + # Display output + print(soln) + +Running this code, we get the same (correct) answer but using fewer evaluations of the objective in the main call to :code:`dfols.solve()`. +The logging information reveals that :code:`x0` was used as the starting point, and :code:`x1` and :code:`x3` were used to build the initial model. +This means that only 4 evaluations of the objective were required in the initialization phase. + + .. code-block:: none + + Using pre-existing evaluation 0 as starting point + Adding pre-existing evaluation 1 to initial model + Adding pre-existing evaluation 3 to initial model + Function eval 1 at point 1 has obj = 15.1910664616598 at x = [...] + Function eval 2 at point 2 has obj = 15.2288491702299 at x = [...] + Function eval 3 at point 3 has obj = 15.228054997542 at x = [...] + Function eval 4 at point 4 has obj = 15.3011037277481 at x = [...] + Beginning main loop + Function eval 5 at point 5 has obj = 13.5524099633802 at x = [...] + Function eval 6 at point 6 has obj = 7.33371957636104 at x = [...] + ... + Function eval 81 at point 81 has obj = 0.00228767005355266 at x = [...] + Did a total of 1 run(s) + + ****** DFO-LS Results ****** + Solution xmin = [-0.01572509 1.01243487 -0.23299163 1.26043009 -1.51372893 0.99299643] + Not showing residual vector because it is too long; check self.resid + Objective value f(xmin) = 0.002287670054 + Needed 81 objective evaluations (at 81 points) + Not showing approximate Jacobian because it is too long; check self.jacobian + Solution xmin was evaluation point 77 + Approximate Jacobian formed using evaluation points [76 73 79 74 77 75 80] + Exit flag = 0 + Success: rho has reached rhoend + **************************** + +Note that the indices of the evaluation database mentioned in the log refer to the order in which the points were added to the evaluation database. + Example: Noisy Objective Evaluation ----------------------------------- As described in :doc:`info`, derivative-free algorithms such as DFO-LS are particularly useful when :code:`objfun` has noise. Let's modify the previous example to include random noise in our objective evaluation, and compare it to SciPy's derivative-based solver (the below results came from using SciPy v1.13.0): @@ -708,3 +871,6 @@ References .. [B2017] Amir Beck, `First-Order Methods in Optimization `_, SIAM (2017). + +.. [MGH1981] + Jorge J. More, Burton S. Garbow and Kenneth E. Hillstrom, `Testing Unconstrained Optimization Software `_, *ACM Transactions on Mathematical Software*, 7:1 (1981), pp. 17-41. diff --git a/docs/build/html/_static/basic.css b/docs/build/html/_static/basic.css index 30fee9d..4738b2e 100644 --- a/docs/build/html/_static/basic.css +++ b/docs/build/html/_static/basic.css @@ -1,12 +1,5 @@ /* - * basic.css - * ~~~~~~~~~ - * * Sphinx stylesheet -- basic theme. - * - * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. - * :license: BSD, see LICENSE for details. - * */ /* -- main layout ----------------------------------------------------------- */ @@ -115,15 +108,11 @@ img { /* -- search page ----------------------------------------------------------- */ ul.search { - margin: 10px 0 0 20px; - padding: 0; + margin-top: 10px; } ul.search li { - padding: 5px 0 5px 20px; - background-image: url(file.png); - background-repeat: no-repeat; - background-position: 0 7px; + padding: 5px 0; } ul.search li a { @@ -752,14 +741,6 @@ abbr, acronym { cursor: help; } -.translated { - background-color: rgba(207, 255, 207, 0.2) -} - -.untranslated { - background-color: rgba(255, 207, 207, 0.2) -} - /* -- code displays --------------------------------------------------------- */ pre { diff --git a/docs/build/html/_static/css/badge_only.css b/docs/build/html/_static/css/badge_only.css index c718cee..88ba55b 100644 --- a/docs/build/html/_static/css/badge_only.css +++ b/docs/build/html/_static/css/badge_only.css @@ -1 +1 @@ -.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}@font-face{font-family:FontAwesome;font-style:normal;font-weight:400;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#FontAwesome) format("svg")}.fa:before{font-family:FontAwesome;font-style:normal;font-weight:400;line-height:1}.fa:before,a .fa{text-decoration:inherit}.fa:before,a .fa,li .fa{display:inline-block}li .fa-large:before{width:1.875em}ul.fas{list-style-type:none;margin-left:2em;text-indent:-.8em}ul.fas li .fa{width:.8em}ul.fas li .fa-large:before{vertical-align:baseline}.fa-book:before,.icon-book:before{content:"\f02d"}.fa-caret-down:before,.icon-caret-down:before{content:"\f0d7"}.fa-caret-up:before,.icon-caret-up:before{content:"\f0d8"}.fa-caret-left:before,.icon-caret-left:before{content:"\f0d9"}.fa-caret-right:before,.icon-caret-right:before{content:"\f0da"}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60}.rst-versions .rst-current-version:after{clear:both;content:"";display:block}.rst-versions .rst-current-version .fa{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}} \ No newline at end of file +.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}@font-face{font-family:FontAwesome;font-style:normal;font-weight:400;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#FontAwesome) format("svg")}.fa:before{font-family:FontAwesome;font-style:normal;font-weight:400;line-height:1}.fa:before,a .fa{text-decoration:inherit}.fa:before,a .fa,li .fa{display:inline-block}li .fa-large:before{width:1.875em}ul.fas{list-style-type:none;margin-left:2em;text-indent:-.8em}ul.fas li .fa{width:.8em}ul.fas li .fa-large:before{vertical-align:baseline}.fa-book:before,.icon-book:before{content:"\f02d"}.fa-caret-down:before,.icon-caret-down:before{content:"\f0d7"}.fa-caret-up:before,.icon-caret-up:before{content:"\f0d8"}.fa-caret-left:before,.icon-caret-left:before{content:"\f0d9"}.fa-caret-right:before,.icon-caret-right:before{content:"\f0da"}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60}.rst-versions .rst-current-version:after{clear:both;content:"";display:block}.rst-versions .rst-current-version .fa{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions .rst-other-versions .rtd-current-item{font-weight:700}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}}#flyout-search-form{padding:6px} \ No newline at end of file diff --git a/docs/build/html/_static/css/theme.css b/docs/build/html/_static/css/theme.css index 19a446a..0f14f10 100644 --- a/docs/build/html/_static/css/theme.css +++ b/docs/build/html/_static/css/theme.css @@ -1,4 +1,4 @@ html{box-sizing:border-box}*,:after,:before{box-sizing:inherit}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}[hidden],audio:not([controls]){display:none}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}blockquote{margin:0}dfn{font-style:italic}ins{background:#ff9;text-decoration:none}ins,mark{color:#000}mark{background:#ff0;font-style:italic;font-weight:700}.rst-content code,.rst-content tt,code,kbd,pre,samp{font-family:monospace,serif;_font-family:courier new,monospace;font-size:1em}pre{white-space:pre}q{quotes:none}q:after,q:before{content:"";content:none}small{font-size:85%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}dl,ol,ul{margin:0;padding:0;list-style:none;list-style-image:none}li{list-style:none}dd{margin:0}img{border:0;-ms-interpolation-mode:bicubic;vertical-align:middle;max-width:100%}svg:not(:root){overflow:hidden}figure,form{margin:0}label{cursor:pointer}button,input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}button,input{line-height:normal}button,input[type=button],input[type=reset],input[type=submit]{cursor:pointer;-webkit-appearance:button;*overflow:visible}button[disabled],input[disabled]{cursor:default}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}textarea{resize:vertical}table{border-collapse:collapse;border-spacing:0}td{vertical-align:top}.chromeframe{margin:.2em 0;background:#ccc;color:#000;padding:.2em 0}.ir{display:block;border:0;text-indent:-999em;overflow:hidden;background-color:transparent;background-repeat:no-repeat;text-align:left;direction:ltr;*line-height:0}.ir br{display:none}.hidden{display:none!important;visibility:hidden}.visuallyhidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.visuallyhidden.focusable:active,.visuallyhidden.focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.invisible{visibility:hidden}.relative{position:relative}big,small{font-size:100%}@media print{body,html,section{background:none!important}*{box-shadow:none!important;text-shadow:none!important;filter:none!important;-ms-filter:none!important}a,a:visited{text-decoration:underline}.ir a:after,a[href^="#"]:after,a[href^="javascript:"]:after{content:""}blockquote,pre{page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}.rst-content .toctree-wrapper>p.caption,h2,h3,p{orphans:3;widows:3}.rst-content .toctree-wrapper>p.caption,h2,h3{page-break-after:avoid}}.btn,.fa:before,.icon:before,.rst-content .admonition,.rst-content .admonition-title:before,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .code-block-caption .headerlink:before,.rst-content .danger,.rst-content .eqno .headerlink:before,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content p .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-alert,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before,.wy-menu-vertical li button.toctree-expand:before,input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week],select,textarea{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}/*! * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) - */@font-face{font-family:FontAwesome;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713);src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix&v=4.7.0) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#fontawesomeregular) format("svg");font-weight:400;font-style:normal}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li button.toctree-expand{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14286em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14286em;width:2.14286em;top:.14286em;text-align:center}.fa-li.fa-lg{left:-1.85714em}.fa-border{padding:.2em .25em .15em;border:.08em solid #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa-pull-left.icon,.fa.fa-pull-left,.rst-content .code-block-caption .fa-pull-left.headerlink,.rst-content .eqno .fa-pull-left.headerlink,.rst-content .fa-pull-left.admonition-title,.rst-content code.download span.fa-pull-left:first-child,.rst-content dl dt .fa-pull-left.headerlink,.rst-content h1 .fa-pull-left.headerlink,.rst-content h2 .fa-pull-left.headerlink,.rst-content h3 .fa-pull-left.headerlink,.rst-content h4 .fa-pull-left.headerlink,.rst-content h5 .fa-pull-left.headerlink,.rst-content h6 .fa-pull-left.headerlink,.rst-content p .fa-pull-left.headerlink,.rst-content table>caption .fa-pull-left.headerlink,.rst-content tt.download span.fa-pull-left:first-child,.wy-menu-vertical li.current>a button.fa-pull-left.toctree-expand,.wy-menu-vertical li.on a button.fa-pull-left.toctree-expand,.wy-menu-vertical li button.fa-pull-left.toctree-expand{margin-right:.3em}.fa-pull-right.icon,.fa.fa-pull-right,.rst-content .code-block-caption .fa-pull-right.headerlink,.rst-content .eqno .fa-pull-right.headerlink,.rst-content .fa-pull-right.admonition-title,.rst-content code.download span.fa-pull-right:first-child,.rst-content dl dt .fa-pull-right.headerlink,.rst-content h1 .fa-pull-right.headerlink,.rst-content h2 .fa-pull-right.headerlink,.rst-content h3 .fa-pull-right.headerlink,.rst-content h4 .fa-pull-right.headerlink,.rst-content h5 .fa-pull-right.headerlink,.rst-content h6 .fa-pull-right.headerlink,.rst-content p .fa-pull-right.headerlink,.rst-content table>caption .fa-pull-right.headerlink,.rst-content tt.download span.fa-pull-right:first-child,.wy-menu-vertical li.current>a button.fa-pull-right.toctree-expand,.wy-menu-vertical li.on a button.fa-pull-right.toctree-expand,.wy-menu-vertical li button.fa-pull-right.toctree-expand{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left,.pull-left.icon,.rst-content .code-block-caption .pull-left.headerlink,.rst-content .eqno .pull-left.headerlink,.rst-content .pull-left.admonition-title,.rst-content code.download span.pull-left:first-child,.rst-content dl dt .pull-left.headerlink,.rst-content h1 .pull-left.headerlink,.rst-content h2 .pull-left.headerlink,.rst-content h3 .pull-left.headerlink,.rst-content h4 .pull-left.headerlink,.rst-content h5 .pull-left.headerlink,.rst-content h6 .pull-left.headerlink,.rst-content p .pull-left.headerlink,.rst-content table>caption .pull-left.headerlink,.rst-content tt.download span.pull-left:first-child,.wy-menu-vertical li.current>a button.pull-left.toctree-expand,.wy-menu-vertical li.on a button.pull-left.toctree-expand,.wy-menu-vertical li button.pull-left.toctree-expand{margin-right:.3em}.fa.pull-right,.pull-right.icon,.rst-content .code-block-caption .pull-right.headerlink,.rst-content .eqno .pull-right.headerlink,.rst-content .pull-right.admonition-title,.rst-content code.download span.pull-right:first-child,.rst-content dl dt .pull-right.headerlink,.rst-content h1 .pull-right.headerlink,.rst-content h2 .pull-right.headerlink,.rst-content h3 .pull-right.headerlink,.rst-content h4 .pull-right.headerlink,.rst-content h5 .pull-right.headerlink,.rst-content h6 .pull-right.headerlink,.rst-content p .pull-right.headerlink,.rst-content table>caption .pull-right.headerlink,.rst-content tt.download span.pull-right:first-child,.wy-menu-vertical li.current>a button.pull-right.toctree-expand,.wy-menu-vertical li.on a button.pull-right.toctree-expand,.wy-menu-vertical li button.pull-right.toctree-expand{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s linear infinite;animation:fa-spin 2s linear infinite}.fa-pulse{-webkit-animation:fa-spin 1s steps(8) infinite;animation:fa-spin 1s steps(8) infinite}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scaleX(-1);-ms-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scaleY(-1);-ms-transform:scaleY(-1);transform:scaleY(-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:""}.fa-music:before{content:""}.fa-search:before,.icon-search:before{content:""}.fa-envelope-o:before{content:""}.fa-heart:before{content:""}.fa-star:before{content:""}.fa-star-o:before{content:""}.fa-user:before{content:""}.fa-film:before{content:""}.fa-th-large:before{content:""}.fa-th:before{content:""}.fa-th-list:before{content:""}.fa-check:before{content:""}.fa-close:before,.fa-remove:before,.fa-times:before{content:""}.fa-search-plus:before{content:""}.fa-search-minus:before{content:""}.fa-power-off:before{content:""}.fa-signal:before{content:""}.fa-cog:before,.fa-gear:before{content:""}.fa-trash-o:before{content:""}.fa-home:before,.icon-home:before{content:""}.fa-file-o:before{content:""}.fa-clock-o:before{content:""}.fa-road:before{content:""}.fa-download:before,.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{content:""}.fa-arrow-circle-o-down:before{content:""}.fa-arrow-circle-o-up:before{content:""}.fa-inbox:before{content:""}.fa-play-circle-o:before{content:""}.fa-repeat:before,.fa-rotate-right:before{content:""}.fa-refresh:before{content:""}.fa-list-alt:before{content:""}.fa-lock:before{content:""}.fa-flag:before{content:""}.fa-headphones:before{content:""}.fa-volume-off:before{content:""}.fa-volume-down:before{content:""}.fa-volume-up:before{content:""}.fa-qrcode:before{content:""}.fa-barcode:before{content:""}.fa-tag:before{content:""}.fa-tags:before{content:""}.fa-book:before,.icon-book:before{content:""}.fa-bookmark:before{content:""}.fa-print:before{content:""}.fa-camera:before{content:""}.fa-font:before{content:""}.fa-bold:before{content:""}.fa-italic:before{content:""}.fa-text-height:before{content:""}.fa-text-width:before{content:""}.fa-align-left:before{content:""}.fa-align-center:before{content:""}.fa-align-right:before{content:""}.fa-align-justify:before{content:""}.fa-list:before{content:""}.fa-dedent:before,.fa-outdent:before{content:""}.fa-indent:before{content:""}.fa-video-camera:before{content:""}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:""}.fa-pencil:before{content:""}.fa-map-marker:before{content:""}.fa-adjust:before{content:""}.fa-tint:before{content:""}.fa-edit:before,.fa-pencil-square-o:before{content:""}.fa-share-square-o:before{content:""}.fa-check-square-o:before{content:""}.fa-arrows:before{content:""}.fa-step-backward:before{content:""}.fa-fast-backward:before{content:""}.fa-backward:before{content:""}.fa-play:before{content:""}.fa-pause:before{content:""}.fa-stop:before{content:""}.fa-forward:before{content:""}.fa-fast-forward:before{content:""}.fa-step-forward:before{content:""}.fa-eject:before{content:""}.fa-chevron-left:before{content:""}.fa-chevron-right:before{content:""}.fa-plus-circle:before{content:""}.fa-minus-circle:before{content:""}.fa-times-circle:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before{content:""}.fa-check-circle:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before{content:""}.fa-question-circle:before{content:""}.fa-info-circle:before{content:""}.fa-crosshairs:before{content:""}.fa-times-circle-o:before{content:""}.fa-check-circle-o:before{content:""}.fa-ban:before{content:""}.fa-arrow-left:before{content:""}.fa-arrow-right:before{content:""}.fa-arrow-up:before{content:""}.fa-arrow-down:before{content:""}.fa-mail-forward:before,.fa-share:before{content:""}.fa-expand:before{content:""}.fa-compress:before{content:""}.fa-plus:before{content:""}.fa-minus:before{content:""}.fa-asterisk:before{content:""}.fa-exclamation-circle:before,.rst-content .admonition-title:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before{content:""}.fa-gift:before{content:""}.fa-leaf:before{content:""}.fa-fire:before,.icon-fire:before{content:""}.fa-eye:before{content:""}.fa-eye-slash:before{content:""}.fa-exclamation-triangle:before,.fa-warning:before{content:""}.fa-plane:before{content:""}.fa-calendar:before{content:""}.fa-random:before{content:""}.fa-comment:before{content:""}.fa-magnet:before{content:""}.fa-chevron-up:before{content:""}.fa-chevron-down:before{content:""}.fa-retweet:before{content:""}.fa-shopping-cart:before{content:""}.fa-folder:before{content:""}.fa-folder-open:before{content:""}.fa-arrows-v:before{content:""}.fa-arrows-h:before{content:""}.fa-bar-chart-o:before,.fa-bar-chart:before{content:""}.fa-twitter-square:before{content:""}.fa-facebook-square:before{content:""}.fa-camera-retro:before{content:""}.fa-key:before{content:""}.fa-cogs:before,.fa-gears:before{content:""}.fa-comments:before{content:""}.fa-thumbs-o-up:before{content:""}.fa-thumbs-o-down:before{content:""}.fa-star-half:before{content:""}.fa-heart-o:before{content:""}.fa-sign-out:before{content:""}.fa-linkedin-square:before{content:""}.fa-thumb-tack:before{content:""}.fa-external-link:before{content:""}.fa-sign-in:before{content:""}.fa-trophy:before{content:""}.fa-github-square:before{content:""}.fa-upload:before{content:""}.fa-lemon-o:before{content:""}.fa-phone:before{content:""}.fa-square-o:before{content:""}.fa-bookmark-o:before{content:""}.fa-phone-square:before{content:""}.fa-twitter:before{content:""}.fa-facebook-f:before,.fa-facebook:before{content:""}.fa-github:before,.icon-github:before{content:""}.fa-unlock:before{content:""}.fa-credit-card:before{content:""}.fa-feed:before,.fa-rss:before{content:""}.fa-hdd-o:before{content:""}.fa-bullhorn:before{content:""}.fa-bell:before{content:""}.fa-certificate:before{content:""}.fa-hand-o-right:before{content:""}.fa-hand-o-left:before{content:""}.fa-hand-o-up:before{content:""}.fa-hand-o-down:before{content:""}.fa-arrow-circle-left:before,.icon-circle-arrow-left:before{content:""}.fa-arrow-circle-right:before,.icon-circle-arrow-right:before{content:""}.fa-arrow-circle-up:before{content:""}.fa-arrow-circle-down:before{content:""}.fa-globe:before{content:""}.fa-wrench:before{content:""}.fa-tasks:before{content:""}.fa-filter:before{content:""}.fa-briefcase:before{content:""}.fa-arrows-alt:before{content:""}.fa-group:before,.fa-users:before{content:""}.fa-chain:before,.fa-link:before,.icon-link:before{content:""}.fa-cloud:before{content:""}.fa-flask:before{content:""}.fa-cut:before,.fa-scissors:before{content:""}.fa-copy:before,.fa-files-o:before{content:""}.fa-paperclip:before{content:""}.fa-floppy-o:before,.fa-save:before{content:""}.fa-square:before{content:""}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:""}.fa-list-ul:before{content:""}.fa-list-ol:before{content:""}.fa-strikethrough:before{content:""}.fa-underline:before{content:""}.fa-table:before{content:""}.fa-magic:before{content:""}.fa-truck:before{content:""}.fa-pinterest:before{content:""}.fa-pinterest-square:before{content:""}.fa-google-plus-square:before{content:""}.fa-google-plus:before{content:""}.fa-money:before{content:""}.fa-caret-down:before,.icon-caret-down:before,.wy-dropdown .caret:before{content:""}.fa-caret-up:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-columns:before{content:""}.fa-sort:before,.fa-unsorted:before{content:""}.fa-sort-desc:before,.fa-sort-down:before{content:""}.fa-sort-asc:before,.fa-sort-up:before{content:""}.fa-envelope:before{content:""}.fa-linkedin:before{content:""}.fa-rotate-left:before,.fa-undo:before{content:""}.fa-gavel:before,.fa-legal:before{content:""}.fa-dashboard:before,.fa-tachometer:before{content:""}.fa-comment-o:before{content:""}.fa-comments-o:before{content:""}.fa-bolt:before,.fa-flash:before{content:""}.fa-sitemap:before{content:""}.fa-umbrella:before{content:""}.fa-clipboard:before,.fa-paste:before{content:""}.fa-lightbulb-o:before{content:""}.fa-exchange:before{content:""}.fa-cloud-download:before{content:""}.fa-cloud-upload:before{content:""}.fa-user-md:before{content:""}.fa-stethoscope:before{content:""}.fa-suitcase:before{content:""}.fa-bell-o:before{content:""}.fa-coffee:before{content:""}.fa-cutlery:before{content:""}.fa-file-text-o:before{content:""}.fa-building-o:before{content:""}.fa-hospital-o:before{content:""}.fa-ambulance:before{content:""}.fa-medkit:before{content:""}.fa-fighter-jet:before{content:""}.fa-beer:before{content:""}.fa-h-square:before{content:""}.fa-plus-square:before{content:""}.fa-angle-double-left:before{content:""}.fa-angle-double-right:before{content:""}.fa-angle-double-up:before{content:""}.fa-angle-double-down:before{content:""}.fa-angle-left:before{content:""}.fa-angle-right:before{content:""}.fa-angle-up:before{content:""}.fa-angle-down:before{content:""}.fa-desktop:before{content:""}.fa-laptop:before{content:""}.fa-tablet:before{content:""}.fa-mobile-phone:before,.fa-mobile:before{content:""}.fa-circle-o:before{content:""}.fa-quote-left:before{content:""}.fa-quote-right:before{content:""}.fa-spinner:before{content:""}.fa-circle:before{content:""}.fa-mail-reply:before,.fa-reply:before{content:""}.fa-github-alt:before{content:""}.fa-folder-o:before{content:""}.fa-folder-open-o:before{content:""}.fa-smile-o:before{content:""}.fa-frown-o:before{content:""}.fa-meh-o:before{content:""}.fa-gamepad:before{content:""}.fa-keyboard-o:before{content:""}.fa-flag-o:before{content:""}.fa-flag-checkered:before{content:""}.fa-terminal:before{content:""}.fa-code:before{content:""}.fa-mail-reply-all:before,.fa-reply-all:before{content:""}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:""}.fa-location-arrow:before{content:""}.fa-crop:before{content:""}.fa-code-fork:before{content:""}.fa-chain-broken:before,.fa-unlink:before{content:""}.fa-question:before{content:""}.fa-info:before{content:""}.fa-exclamation:before{content:""}.fa-superscript:before{content:""}.fa-subscript:before{content:""}.fa-eraser:before{content:""}.fa-puzzle-piece:before{content:""}.fa-microphone:before{content:""}.fa-microphone-slash:before{content:""}.fa-shield:before{content:""}.fa-calendar-o:before{content:""}.fa-fire-extinguisher:before{content:""}.fa-rocket:before{content:""}.fa-maxcdn:before{content:""}.fa-chevron-circle-left:before{content:""}.fa-chevron-circle-right:before{content:""}.fa-chevron-circle-up:before{content:""}.fa-chevron-circle-down:before{content:""}.fa-html5:before{content:""}.fa-css3:before{content:""}.fa-anchor:before{content:""}.fa-unlock-alt:before{content:""}.fa-bullseye:before{content:""}.fa-ellipsis-h:before{content:""}.fa-ellipsis-v:before{content:""}.fa-rss-square:before{content:""}.fa-play-circle:before{content:""}.fa-ticket:before{content:""}.fa-minus-square:before{content:""}.fa-minus-square-o:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before{content:""}.fa-level-up:before{content:""}.fa-level-down:before{content:""}.fa-check-square:before{content:""}.fa-pencil-square:before{content:""}.fa-external-link-square:before{content:""}.fa-share-square:before{content:""}.fa-compass:before{content:""}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:""}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:""}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:""}.fa-eur:before,.fa-euro:before{content:""}.fa-gbp:before{content:""}.fa-dollar:before,.fa-usd:before{content:""}.fa-inr:before,.fa-rupee:before{content:""}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:""}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:""}.fa-krw:before,.fa-won:before{content:""}.fa-bitcoin:before,.fa-btc:before{content:""}.fa-file:before{content:""}.fa-file-text:before{content:""}.fa-sort-alpha-asc:before{content:""}.fa-sort-alpha-desc:before{content:""}.fa-sort-amount-asc:before{content:""}.fa-sort-amount-desc:before{content:""}.fa-sort-numeric-asc:before{content:""}.fa-sort-numeric-desc:before{content:""}.fa-thumbs-up:before{content:""}.fa-thumbs-down:before{content:""}.fa-youtube-square:before{content:""}.fa-youtube:before{content:""}.fa-xing:before{content:""}.fa-xing-square:before{content:""}.fa-youtube-play:before{content:""}.fa-dropbox:before{content:""}.fa-stack-overflow:before{content:""}.fa-instagram:before{content:""}.fa-flickr:before{content:""}.fa-adn:before{content:""}.fa-bitbucket:before,.icon-bitbucket:before{content:""}.fa-bitbucket-square:before{content:""}.fa-tumblr:before{content:""}.fa-tumblr-square:before{content:""}.fa-long-arrow-down:before{content:""}.fa-long-arrow-up:before{content:""}.fa-long-arrow-left:before{content:""}.fa-long-arrow-right:before{content:""}.fa-apple:before{content:""}.fa-windows:before{content:""}.fa-android:before{content:""}.fa-linux:before{content:""}.fa-dribbble:before{content:""}.fa-skype:before{content:""}.fa-foursquare:before{content:""}.fa-trello:before{content:""}.fa-female:before{content:""}.fa-male:before{content:""}.fa-gittip:before,.fa-gratipay:before{content:""}.fa-sun-o:before{content:""}.fa-moon-o:before{content:""}.fa-archive:before{content:""}.fa-bug:before{content:""}.fa-vk:before{content:""}.fa-weibo:before{content:""}.fa-renren:before{content:""}.fa-pagelines:before{content:""}.fa-stack-exchange:before{content:""}.fa-arrow-circle-o-right:before{content:""}.fa-arrow-circle-o-left:before{content:""}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:""}.fa-dot-circle-o:before{content:""}.fa-wheelchair:before{content:""}.fa-vimeo-square:before{content:""}.fa-try:before,.fa-turkish-lira:before{content:""}.fa-plus-square-o:before,.wy-menu-vertical li button.toctree-expand:before{content:""}.fa-space-shuttle:before{content:""}.fa-slack:before{content:""}.fa-envelope-square:before{content:""}.fa-wordpress:before{content:""}.fa-openid:before{content:""}.fa-bank:before,.fa-institution:before,.fa-university:before{content:""}.fa-graduation-cap:before,.fa-mortar-board:before{content:""}.fa-yahoo:before{content:""}.fa-google:before{content:""}.fa-reddit:before{content:""}.fa-reddit-square:before{content:""}.fa-stumbleupon-circle:before{content:""}.fa-stumbleupon:before{content:""}.fa-delicious:before{content:""}.fa-digg:before{content:""}.fa-pied-piper-pp:before{content:""}.fa-pied-piper-alt:before{content:""}.fa-drupal:before{content:""}.fa-joomla:before{content:""}.fa-language:before{content:""}.fa-fax:before{content:""}.fa-building:before{content:""}.fa-child:before{content:""}.fa-paw:before{content:""}.fa-spoon:before{content:""}.fa-cube:before{content:""}.fa-cubes:before{content:""}.fa-behance:before{content:""}.fa-behance-square:before{content:""}.fa-steam:before{content:""}.fa-steam-square:before{content:""}.fa-recycle:before{content:""}.fa-automobile:before,.fa-car:before{content:""}.fa-cab:before,.fa-taxi:before{content:""}.fa-tree:before{content:""}.fa-spotify:before{content:""}.fa-deviantart:before{content:""}.fa-soundcloud:before{content:""}.fa-database:before{content:""}.fa-file-pdf-o:before{content:""}.fa-file-word-o:before{content:""}.fa-file-excel-o:before{content:""}.fa-file-powerpoint-o:before{content:""}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:""}.fa-file-archive-o:before,.fa-file-zip-o:before{content:""}.fa-file-audio-o:before,.fa-file-sound-o:before{content:""}.fa-file-movie-o:before,.fa-file-video-o:before{content:""}.fa-file-code-o:before{content:""}.fa-vine:before{content:""}.fa-codepen:before{content:""}.fa-jsfiddle:before{content:""}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:""}.fa-circle-o-notch:before{content:""}.fa-ra:before,.fa-rebel:before,.fa-resistance:before{content:""}.fa-empire:before,.fa-ge:before{content:""}.fa-git-square:before{content:""}.fa-git:before{content:""}.fa-hacker-news:before,.fa-y-combinator-square:before,.fa-yc-square:before{content:""}.fa-tencent-weibo:before{content:""}.fa-qq:before{content:""}.fa-wechat:before,.fa-weixin:before{content:""}.fa-paper-plane:before,.fa-send:before{content:""}.fa-paper-plane-o:before,.fa-send-o:before{content:""}.fa-history:before{content:""}.fa-circle-thin:before{content:""}.fa-header:before{content:""}.fa-paragraph:before{content:""}.fa-sliders:before{content:""}.fa-share-alt:before{content:""}.fa-share-alt-square:before{content:""}.fa-bomb:before{content:""}.fa-futbol-o:before,.fa-soccer-ball-o:before{content:""}.fa-tty:before{content:""}.fa-binoculars:before{content:""}.fa-plug:before{content:""}.fa-slideshare:before{content:""}.fa-twitch:before{content:""}.fa-yelp:before{content:""}.fa-newspaper-o:before{content:""}.fa-wifi:before{content:""}.fa-calculator:before{content:""}.fa-paypal:before{content:""}.fa-google-wallet:before{content:""}.fa-cc-visa:before{content:""}.fa-cc-mastercard:before{content:""}.fa-cc-discover:before{content:""}.fa-cc-amex:before{content:""}.fa-cc-paypal:before{content:""}.fa-cc-stripe:before{content:""}.fa-bell-slash:before{content:""}.fa-bell-slash-o:before{content:""}.fa-trash:before{content:""}.fa-copyright:before{content:""}.fa-at:before{content:""}.fa-eyedropper:before{content:""}.fa-paint-brush:before{content:""}.fa-birthday-cake:before{content:""}.fa-area-chart:before{content:""}.fa-pie-chart:before{content:""}.fa-line-chart:before{content:""}.fa-lastfm:before{content:""}.fa-lastfm-square:before{content:""}.fa-toggle-off:before{content:""}.fa-toggle-on:before{content:""}.fa-bicycle:before{content:""}.fa-bus:before{content:""}.fa-ioxhost:before{content:""}.fa-angellist:before{content:""}.fa-cc:before{content:""}.fa-ils:before,.fa-shekel:before,.fa-sheqel:before{content:""}.fa-meanpath:before{content:""}.fa-buysellads:before{content:""}.fa-connectdevelop:before{content:""}.fa-dashcube:before{content:""}.fa-forumbee:before{content:""}.fa-leanpub:before{content:""}.fa-sellsy:before{content:""}.fa-shirtsinbulk:before{content:""}.fa-simplybuilt:before{content:""}.fa-skyatlas:before{content:""}.fa-cart-plus:before{content:""}.fa-cart-arrow-down:before{content:""}.fa-diamond:before{content:""}.fa-ship:before{content:""}.fa-user-secret:before{content:""}.fa-motorcycle:before{content:""}.fa-street-view:before{content:""}.fa-heartbeat:before{content:""}.fa-venus:before{content:""}.fa-mars:before{content:""}.fa-mercury:before{content:""}.fa-intersex:before,.fa-transgender:before{content:""}.fa-transgender-alt:before{content:""}.fa-venus-double:before{content:""}.fa-mars-double:before{content:""}.fa-venus-mars:before{content:""}.fa-mars-stroke:before{content:""}.fa-mars-stroke-v:before{content:""}.fa-mars-stroke-h:before{content:""}.fa-neuter:before{content:""}.fa-genderless:before{content:""}.fa-facebook-official:before{content:""}.fa-pinterest-p:before{content:""}.fa-whatsapp:before{content:""}.fa-server:before{content:""}.fa-user-plus:before{content:""}.fa-user-times:before{content:""}.fa-bed:before,.fa-hotel:before{content:""}.fa-viacoin:before{content:""}.fa-train:before{content:""}.fa-subway:before{content:""}.fa-medium:before{content:""}.fa-y-combinator:before,.fa-yc:before{content:""}.fa-optin-monster:before{content:""}.fa-opencart:before{content:""}.fa-expeditedssl:before{content:""}.fa-battery-4:before,.fa-battery-full:before,.fa-battery:before{content:""}.fa-battery-3:before,.fa-battery-three-quarters:before{content:""}.fa-battery-2:before,.fa-battery-half:before{content:""}.fa-battery-1:before,.fa-battery-quarter:before{content:""}.fa-battery-0:before,.fa-battery-empty:before{content:""}.fa-mouse-pointer:before{content:""}.fa-i-cursor:before{content:""}.fa-object-group:before{content:""}.fa-object-ungroup:before{content:""}.fa-sticky-note:before{content:""}.fa-sticky-note-o:before{content:""}.fa-cc-jcb:before{content:""}.fa-cc-diners-club:before{content:""}.fa-clone:before{content:""}.fa-balance-scale:before{content:""}.fa-hourglass-o:before{content:""}.fa-hourglass-1:before,.fa-hourglass-start:before{content:""}.fa-hourglass-2:before,.fa-hourglass-half:before{content:""}.fa-hourglass-3:before,.fa-hourglass-end:before{content:""}.fa-hourglass:before{content:""}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:""}.fa-hand-paper-o:before,.fa-hand-stop-o:before{content:""}.fa-hand-scissors-o:before{content:""}.fa-hand-lizard-o:before{content:""}.fa-hand-spock-o:before{content:""}.fa-hand-pointer-o:before{content:""}.fa-hand-peace-o:before{content:""}.fa-trademark:before{content:""}.fa-registered:before{content:""}.fa-creative-commons:before{content:""}.fa-gg:before{content:""}.fa-gg-circle:before{content:""}.fa-tripadvisor:before{content:""}.fa-odnoklassniki:before{content:""}.fa-odnoklassniki-square:before{content:""}.fa-get-pocket:before{content:""}.fa-wikipedia-w:before{content:""}.fa-safari:before{content:""}.fa-chrome:before{content:""}.fa-firefox:before{content:""}.fa-opera:before{content:""}.fa-internet-explorer:before{content:""}.fa-television:before,.fa-tv:before{content:""}.fa-contao:before{content:""}.fa-500px:before{content:""}.fa-amazon:before{content:""}.fa-calendar-plus-o:before{content:""}.fa-calendar-minus-o:before{content:""}.fa-calendar-times-o:before{content:""}.fa-calendar-check-o:before{content:""}.fa-industry:before{content:""}.fa-map-pin:before{content:""}.fa-map-signs:before{content:""}.fa-map-o:before{content:""}.fa-map:before{content:""}.fa-commenting:before{content:""}.fa-commenting-o:before{content:""}.fa-houzz:before{content:""}.fa-vimeo:before{content:""}.fa-black-tie:before{content:""}.fa-fonticons:before{content:""}.fa-reddit-alien:before{content:""}.fa-edge:before{content:""}.fa-credit-card-alt:before{content:""}.fa-codiepie:before{content:""}.fa-modx:before{content:""}.fa-fort-awesome:before{content:""}.fa-usb:before{content:""}.fa-product-hunt:before{content:""}.fa-mixcloud:before{content:""}.fa-scribd:before{content:""}.fa-pause-circle:before{content:""}.fa-pause-circle-o:before{content:""}.fa-stop-circle:before{content:""}.fa-stop-circle-o:before{content:""}.fa-shopping-bag:before{content:""}.fa-shopping-basket:before{content:""}.fa-hashtag:before{content:""}.fa-bluetooth:before{content:""}.fa-bluetooth-b:before{content:""}.fa-percent:before{content:""}.fa-gitlab:before,.icon-gitlab:before{content:""}.fa-wpbeginner:before{content:""}.fa-wpforms:before{content:""}.fa-envira:before{content:""}.fa-universal-access:before{content:""}.fa-wheelchair-alt:before{content:""}.fa-question-circle-o:before{content:""}.fa-blind:before{content:""}.fa-audio-description:before{content:""}.fa-volume-control-phone:before{content:""}.fa-braille:before{content:""}.fa-assistive-listening-systems:before{content:""}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before{content:""}.fa-deaf:before,.fa-deafness:before,.fa-hard-of-hearing:before{content:""}.fa-glide:before{content:""}.fa-glide-g:before{content:""}.fa-sign-language:before,.fa-signing:before{content:""}.fa-low-vision:before{content:""}.fa-viadeo:before{content:""}.fa-viadeo-square:before{content:""}.fa-snapchat:before{content:""}.fa-snapchat-ghost:before{content:""}.fa-snapchat-square:before{content:""}.fa-pied-piper:before{content:""}.fa-first-order:before{content:""}.fa-yoast:before{content:""}.fa-themeisle:before{content:""}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:""}.fa-fa:before,.fa-font-awesome:before{content:""}.fa-handshake-o:before{content:""}.fa-envelope-open:before{content:""}.fa-envelope-open-o:before{content:""}.fa-linode:before{content:""}.fa-address-book:before{content:""}.fa-address-book-o:before{content:""}.fa-address-card:before,.fa-vcard:before{content:""}.fa-address-card-o:before,.fa-vcard-o:before{content:""}.fa-user-circle:before{content:""}.fa-user-circle-o:before{content:""}.fa-user-o:before{content:""}.fa-id-badge:before{content:""}.fa-drivers-license:before,.fa-id-card:before{content:""}.fa-drivers-license-o:before,.fa-id-card-o:before{content:""}.fa-quora:before{content:""}.fa-free-code-camp:before{content:""}.fa-telegram:before{content:""}.fa-thermometer-4:before,.fa-thermometer-full:before,.fa-thermometer:before{content:""}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:""}.fa-thermometer-2:before,.fa-thermometer-half:before{content:""}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:""}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:""}.fa-shower:before{content:""}.fa-bath:before,.fa-bathtub:before,.fa-s15:before{content:""}.fa-podcast:before{content:""}.fa-window-maximize:before{content:""}.fa-window-minimize:before{content:""}.fa-window-restore:before{content:""}.fa-times-rectangle:before,.fa-window-close:before{content:""}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:""}.fa-bandcamp:before{content:""}.fa-grav:before{content:""}.fa-etsy:before{content:""}.fa-imdb:before{content:""}.fa-ravelry:before{content:""}.fa-eercast:before{content:""}.fa-microchip:before{content:""}.fa-snowflake-o:before{content:""}.fa-superpowers:before{content:""}.fa-wpexplorer:before{content:""}.fa-meetup:before{content:""}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-dropdown .caret,.wy-inline-validate.wy-inline-validate-danger .wy-input-context,.wy-inline-validate.wy-inline-validate-info .wy-input-context,.wy-inline-validate.wy-inline-validate-success .wy-input-context,.wy-inline-validate.wy-inline-validate-warning .wy-input-context,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li button.toctree-expand{font-family:inherit}.fa:before,.icon:before,.rst-content .admonition-title:before,.rst-content .code-block-caption .headerlink:before,.rst-content .eqno .headerlink:before,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content p .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before,.wy-menu-vertical li button.toctree-expand:before{font-family:FontAwesome;display:inline-block;font-style:normal;font-weight:400;line-height:1;text-decoration:inherit}.rst-content .code-block-caption a .headerlink,.rst-content .eqno a .headerlink,.rst-content a .admonition-title,.rst-content code.download a span:first-child,.rst-content dl dt a .headerlink,.rst-content h1 a .headerlink,.rst-content h2 a .headerlink,.rst-content h3 a .headerlink,.rst-content h4 a .headerlink,.rst-content h5 a .headerlink,.rst-content h6 a .headerlink,.rst-content p.caption a .headerlink,.rst-content p a .headerlink,.rst-content table>caption a .headerlink,.rst-content tt.download a span:first-child,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li a button.toctree-expand,a .fa,a .icon,a .rst-content .admonition-title,a .rst-content .code-block-caption .headerlink,a .rst-content .eqno .headerlink,a .rst-content code.download span:first-child,a .rst-content dl dt .headerlink,a .rst-content h1 .headerlink,a .rst-content h2 .headerlink,a .rst-content h3 .headerlink,a .rst-content h4 .headerlink,a .rst-content h5 .headerlink,a .rst-content h6 .headerlink,a .rst-content p.caption .headerlink,a .rst-content p .headerlink,a .rst-content table>caption .headerlink,a .rst-content tt.download span:first-child,a .wy-menu-vertical li button.toctree-expand{display:inline-block;text-decoration:inherit}.btn .fa,.btn .icon,.btn .rst-content .admonition-title,.btn .rst-content .code-block-caption .headerlink,.btn .rst-content .eqno .headerlink,.btn .rst-content code.download span:first-child,.btn .rst-content dl dt .headerlink,.btn .rst-content h1 .headerlink,.btn .rst-content h2 .headerlink,.btn .rst-content h3 .headerlink,.btn .rst-content h4 .headerlink,.btn .rst-content h5 .headerlink,.btn .rst-content h6 .headerlink,.btn .rst-content p .headerlink,.btn .rst-content table>caption .headerlink,.btn .rst-content tt.download span:first-child,.btn .wy-menu-vertical li.current>a button.toctree-expand,.btn .wy-menu-vertical li.on a button.toctree-expand,.btn .wy-menu-vertical li button.toctree-expand,.nav .fa,.nav .icon,.nav .rst-content .admonition-title,.nav .rst-content .code-block-caption .headerlink,.nav .rst-content .eqno .headerlink,.nav .rst-content code.download span:first-child,.nav .rst-content dl dt .headerlink,.nav .rst-content h1 .headerlink,.nav .rst-content h2 .headerlink,.nav .rst-content h3 .headerlink,.nav .rst-content h4 .headerlink,.nav .rst-content h5 .headerlink,.nav .rst-content h6 .headerlink,.nav .rst-content p .headerlink,.nav .rst-content table>caption .headerlink,.nav .rst-content tt.download span:first-child,.nav .wy-menu-vertical li.current>a button.toctree-expand,.nav .wy-menu-vertical li.on a button.toctree-expand,.nav .wy-menu-vertical li button.toctree-expand,.rst-content .btn .admonition-title,.rst-content .code-block-caption .btn .headerlink,.rst-content .code-block-caption .nav .headerlink,.rst-content .eqno .btn .headerlink,.rst-content .eqno .nav .headerlink,.rst-content .nav .admonition-title,.rst-content code.download .btn span:first-child,.rst-content code.download .nav span:first-child,.rst-content dl dt .btn .headerlink,.rst-content dl dt .nav .headerlink,.rst-content h1 .btn .headerlink,.rst-content h1 .nav .headerlink,.rst-content h2 .btn .headerlink,.rst-content h2 .nav .headerlink,.rst-content h3 .btn .headerlink,.rst-content h3 .nav .headerlink,.rst-content h4 .btn .headerlink,.rst-content h4 .nav .headerlink,.rst-content h5 .btn .headerlink,.rst-content h5 .nav .headerlink,.rst-content h6 .btn .headerlink,.rst-content h6 .nav .headerlink,.rst-content p .btn .headerlink,.rst-content p .nav .headerlink,.rst-content table>caption .btn .headerlink,.rst-content table>caption .nav .headerlink,.rst-content tt.download .btn span:first-child,.rst-content tt.download .nav span:first-child,.wy-menu-vertical li .btn button.toctree-expand,.wy-menu-vertical li.current>a .btn button.toctree-expand,.wy-menu-vertical li.current>a .nav button.toctree-expand,.wy-menu-vertical li .nav button.toctree-expand,.wy-menu-vertical li.on a .btn button.toctree-expand,.wy-menu-vertical li.on a .nav button.toctree-expand{display:inline}.btn .fa-large.icon,.btn .fa.fa-large,.btn .rst-content .code-block-caption .fa-large.headerlink,.btn .rst-content .eqno .fa-large.headerlink,.btn .rst-content .fa-large.admonition-title,.btn .rst-content code.download span.fa-large:first-child,.btn .rst-content dl dt .fa-large.headerlink,.btn .rst-content h1 .fa-large.headerlink,.btn .rst-content h2 .fa-large.headerlink,.btn .rst-content h3 .fa-large.headerlink,.btn .rst-content h4 .fa-large.headerlink,.btn .rst-content h5 .fa-large.headerlink,.btn .rst-content h6 .fa-large.headerlink,.btn .rst-content p .fa-large.headerlink,.btn .rst-content table>caption .fa-large.headerlink,.btn .rst-content tt.download span.fa-large:first-child,.btn .wy-menu-vertical li button.fa-large.toctree-expand,.nav .fa-large.icon,.nav .fa.fa-large,.nav .rst-content .code-block-caption .fa-large.headerlink,.nav .rst-content .eqno .fa-large.headerlink,.nav .rst-content .fa-large.admonition-title,.nav .rst-content code.download span.fa-large:first-child,.nav .rst-content dl dt .fa-large.headerlink,.nav .rst-content h1 .fa-large.headerlink,.nav .rst-content h2 .fa-large.headerlink,.nav .rst-content h3 .fa-large.headerlink,.nav .rst-content h4 .fa-large.headerlink,.nav .rst-content h5 .fa-large.headerlink,.nav .rst-content h6 .fa-large.headerlink,.nav .rst-content p .fa-large.headerlink,.nav .rst-content table>caption .fa-large.headerlink,.nav .rst-content tt.download span.fa-large:first-child,.nav .wy-menu-vertical li button.fa-large.toctree-expand,.rst-content .btn .fa-large.admonition-title,.rst-content .code-block-caption .btn .fa-large.headerlink,.rst-content .code-block-caption .nav .fa-large.headerlink,.rst-content .eqno .btn .fa-large.headerlink,.rst-content .eqno .nav .fa-large.headerlink,.rst-content .nav .fa-large.admonition-title,.rst-content code.download .btn span.fa-large:first-child,.rst-content code.download .nav span.fa-large:first-child,.rst-content dl dt .btn .fa-large.headerlink,.rst-content dl dt .nav .fa-large.headerlink,.rst-content h1 .btn .fa-large.headerlink,.rst-content h1 .nav .fa-large.headerlink,.rst-content h2 .btn .fa-large.headerlink,.rst-content h2 .nav .fa-large.headerlink,.rst-content h3 .btn .fa-large.headerlink,.rst-content h3 .nav .fa-large.headerlink,.rst-content h4 .btn .fa-large.headerlink,.rst-content h4 .nav .fa-large.headerlink,.rst-content h5 .btn .fa-large.headerlink,.rst-content h5 .nav .fa-large.headerlink,.rst-content h6 .btn .fa-large.headerlink,.rst-content h6 .nav .fa-large.headerlink,.rst-content p .btn .fa-large.headerlink,.rst-content p .nav .fa-large.headerlink,.rst-content table>caption .btn .fa-large.headerlink,.rst-content table>caption .nav .fa-large.headerlink,.rst-content tt.download .btn span.fa-large:first-child,.rst-content tt.download .nav span.fa-large:first-child,.wy-menu-vertical li .btn button.fa-large.toctree-expand,.wy-menu-vertical li .nav button.fa-large.toctree-expand{line-height:.9em}.btn .fa-spin.icon,.btn .fa.fa-spin,.btn .rst-content .code-block-caption .fa-spin.headerlink,.btn .rst-content .eqno .fa-spin.headerlink,.btn .rst-content .fa-spin.admonition-title,.btn .rst-content code.download span.fa-spin:first-child,.btn .rst-content dl dt .fa-spin.headerlink,.btn .rst-content h1 .fa-spin.headerlink,.btn .rst-content h2 .fa-spin.headerlink,.btn .rst-content h3 .fa-spin.headerlink,.btn .rst-content h4 .fa-spin.headerlink,.btn .rst-content h5 .fa-spin.headerlink,.btn .rst-content h6 .fa-spin.headerlink,.btn .rst-content p .fa-spin.headerlink,.btn .rst-content table>caption .fa-spin.headerlink,.btn .rst-content tt.download span.fa-spin:first-child,.btn .wy-menu-vertical li button.fa-spin.toctree-expand,.nav .fa-spin.icon,.nav .fa.fa-spin,.nav .rst-content .code-block-caption .fa-spin.headerlink,.nav .rst-content .eqno .fa-spin.headerlink,.nav .rst-content .fa-spin.admonition-title,.nav .rst-content code.download span.fa-spin:first-child,.nav .rst-content dl dt .fa-spin.headerlink,.nav .rst-content h1 .fa-spin.headerlink,.nav .rst-content h2 .fa-spin.headerlink,.nav .rst-content h3 .fa-spin.headerlink,.nav .rst-content h4 .fa-spin.headerlink,.nav .rst-content h5 .fa-spin.headerlink,.nav .rst-content h6 .fa-spin.headerlink,.nav .rst-content p .fa-spin.headerlink,.nav .rst-content table>caption .fa-spin.headerlink,.nav .rst-content tt.download span.fa-spin:first-child,.nav .wy-menu-vertical li button.fa-spin.toctree-expand,.rst-content .btn .fa-spin.admonition-title,.rst-content .code-block-caption .btn .fa-spin.headerlink,.rst-content .code-block-caption .nav .fa-spin.headerlink,.rst-content .eqno .btn .fa-spin.headerlink,.rst-content .eqno .nav .fa-spin.headerlink,.rst-content .nav .fa-spin.admonition-title,.rst-content code.download .btn span.fa-spin:first-child,.rst-content code.download .nav span.fa-spin:first-child,.rst-content dl dt .btn .fa-spin.headerlink,.rst-content dl dt .nav .fa-spin.headerlink,.rst-content h1 .btn .fa-spin.headerlink,.rst-content h1 .nav .fa-spin.headerlink,.rst-content h2 .btn .fa-spin.headerlink,.rst-content h2 .nav .fa-spin.headerlink,.rst-content h3 .btn .fa-spin.headerlink,.rst-content h3 .nav .fa-spin.headerlink,.rst-content h4 .btn .fa-spin.headerlink,.rst-content h4 .nav .fa-spin.headerlink,.rst-content h5 .btn .fa-spin.headerlink,.rst-content h5 .nav .fa-spin.headerlink,.rst-content h6 .btn .fa-spin.headerlink,.rst-content h6 .nav .fa-spin.headerlink,.rst-content p .btn .fa-spin.headerlink,.rst-content p .nav .fa-spin.headerlink,.rst-content table>caption .btn .fa-spin.headerlink,.rst-content table>caption .nav .fa-spin.headerlink,.rst-content tt.download .btn span.fa-spin:first-child,.rst-content tt.download .nav span.fa-spin:first-child,.wy-menu-vertical li .btn button.fa-spin.toctree-expand,.wy-menu-vertical li .nav button.fa-spin.toctree-expand{display:inline-block}.btn.fa:before,.btn.icon:before,.rst-content .btn.admonition-title:before,.rst-content .code-block-caption .btn.headerlink:before,.rst-content .eqno .btn.headerlink:before,.rst-content code.download span.btn:first-child:before,.rst-content dl dt .btn.headerlink:before,.rst-content h1 .btn.headerlink:before,.rst-content h2 .btn.headerlink:before,.rst-content h3 .btn.headerlink:before,.rst-content h4 .btn.headerlink:before,.rst-content h5 .btn.headerlink:before,.rst-content h6 .btn.headerlink:before,.rst-content p .btn.headerlink:before,.rst-content table>caption .btn.headerlink:before,.rst-content tt.download span.btn:first-child:before,.wy-menu-vertical li button.btn.toctree-expand:before{opacity:.5;-webkit-transition:opacity .05s ease-in;-moz-transition:opacity .05s ease-in;transition:opacity .05s ease-in}.btn.fa:hover:before,.btn.icon:hover:before,.rst-content .btn.admonition-title:hover:before,.rst-content .code-block-caption .btn.headerlink:hover:before,.rst-content .eqno .btn.headerlink:hover:before,.rst-content code.download span.btn:first-child:hover:before,.rst-content dl dt .btn.headerlink:hover:before,.rst-content h1 .btn.headerlink:hover:before,.rst-content h2 .btn.headerlink:hover:before,.rst-content h3 .btn.headerlink:hover:before,.rst-content h4 .btn.headerlink:hover:before,.rst-content h5 .btn.headerlink:hover:before,.rst-content h6 .btn.headerlink:hover:before,.rst-content p .btn.headerlink:hover:before,.rst-content table>caption .btn.headerlink:hover:before,.rst-content tt.download span.btn:first-child:hover:before,.wy-menu-vertical li button.btn.toctree-expand:hover:before{opacity:1}.btn-mini .fa:before,.btn-mini .icon:before,.btn-mini .rst-content .admonition-title:before,.btn-mini .rst-content .code-block-caption .headerlink:before,.btn-mini .rst-content .eqno .headerlink:before,.btn-mini .rst-content code.download span:first-child:before,.btn-mini .rst-content dl dt .headerlink:before,.btn-mini .rst-content h1 .headerlink:before,.btn-mini .rst-content h2 .headerlink:before,.btn-mini .rst-content h3 .headerlink:before,.btn-mini .rst-content h4 .headerlink:before,.btn-mini .rst-content h5 .headerlink:before,.btn-mini .rst-content h6 .headerlink:before,.btn-mini .rst-content p .headerlink:before,.btn-mini .rst-content table>caption .headerlink:before,.btn-mini .rst-content tt.download span:first-child:before,.btn-mini .wy-menu-vertical li button.toctree-expand:before,.rst-content .btn-mini .admonition-title:before,.rst-content .code-block-caption .btn-mini .headerlink:before,.rst-content .eqno .btn-mini .headerlink:before,.rst-content code.download .btn-mini span:first-child:before,.rst-content dl dt .btn-mini .headerlink:before,.rst-content h1 .btn-mini .headerlink:before,.rst-content h2 .btn-mini .headerlink:before,.rst-content h3 .btn-mini .headerlink:before,.rst-content h4 .btn-mini .headerlink:before,.rst-content h5 .btn-mini .headerlink:before,.rst-content h6 .btn-mini .headerlink:before,.rst-content p .btn-mini .headerlink:before,.rst-content table>caption .btn-mini .headerlink:before,.rst-content tt.download .btn-mini span:first-child:before,.wy-menu-vertical li .btn-mini button.toctree-expand:before{font-size:14px;vertical-align:-15%}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.wy-alert{padding:12px;line-height:24px;margin-bottom:24px;background:#e7f2fa}.rst-content .admonition-title,.wy-alert-title{font-weight:700;display:block;color:#fff;background:#6ab0de;padding:6px 12px;margin:-12px -12px 12px}.rst-content .danger,.rst-content .error,.rst-content .wy-alert-danger.admonition,.rst-content .wy-alert-danger.admonition-todo,.rst-content .wy-alert-danger.attention,.rst-content .wy-alert-danger.caution,.rst-content .wy-alert-danger.hint,.rst-content .wy-alert-danger.important,.rst-content .wy-alert-danger.note,.rst-content .wy-alert-danger.seealso,.rst-content .wy-alert-danger.tip,.rst-content .wy-alert-danger.warning,.wy-alert.wy-alert-danger{background:#fdf3f2}.rst-content .danger .admonition-title,.rst-content .danger .wy-alert-title,.rst-content .error .admonition-title,.rst-content .error .wy-alert-title,.rst-content .wy-alert-danger.admonition-todo .admonition-title,.rst-content .wy-alert-danger.admonition-todo .wy-alert-title,.rst-content .wy-alert-danger.admonition .admonition-title,.rst-content .wy-alert-danger.admonition .wy-alert-title,.rst-content .wy-alert-danger.attention .admonition-title,.rst-content .wy-alert-danger.attention .wy-alert-title,.rst-content .wy-alert-danger.caution .admonition-title,.rst-content .wy-alert-danger.caution .wy-alert-title,.rst-content .wy-alert-danger.hint .admonition-title,.rst-content .wy-alert-danger.hint .wy-alert-title,.rst-content .wy-alert-danger.important .admonition-title,.rst-content .wy-alert-danger.important .wy-alert-title,.rst-content .wy-alert-danger.note .admonition-title,.rst-content .wy-alert-danger.note .wy-alert-title,.rst-content .wy-alert-danger.seealso .admonition-title,.rst-content .wy-alert-danger.seealso .wy-alert-title,.rst-content .wy-alert-danger.tip .admonition-title,.rst-content .wy-alert-danger.tip .wy-alert-title,.rst-content .wy-alert-danger.warning .admonition-title,.rst-content .wy-alert-danger.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-danger .admonition-title,.wy-alert.wy-alert-danger .rst-content .admonition-title,.wy-alert.wy-alert-danger .wy-alert-title{background:#f29f97}.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .warning,.rst-content .wy-alert-warning.admonition,.rst-content .wy-alert-warning.danger,.rst-content .wy-alert-warning.error,.rst-content .wy-alert-warning.hint,.rst-content .wy-alert-warning.important,.rst-content .wy-alert-warning.note,.rst-content .wy-alert-warning.seealso,.rst-content .wy-alert-warning.tip,.wy-alert.wy-alert-warning{background:#ffedcc}.rst-content .admonition-todo .admonition-title,.rst-content .admonition-todo .wy-alert-title,.rst-content .attention .admonition-title,.rst-content .attention .wy-alert-title,.rst-content .caution .admonition-title,.rst-content .caution .wy-alert-title,.rst-content .warning .admonition-title,.rst-content .warning .wy-alert-title,.rst-content .wy-alert-warning.admonition .admonition-title,.rst-content .wy-alert-warning.admonition .wy-alert-title,.rst-content .wy-alert-warning.danger .admonition-title,.rst-content .wy-alert-warning.danger .wy-alert-title,.rst-content .wy-alert-warning.error .admonition-title,.rst-content .wy-alert-warning.error .wy-alert-title,.rst-content .wy-alert-warning.hint .admonition-title,.rst-content .wy-alert-warning.hint .wy-alert-title,.rst-content .wy-alert-warning.important .admonition-title,.rst-content .wy-alert-warning.important .wy-alert-title,.rst-content .wy-alert-warning.note .admonition-title,.rst-content .wy-alert-warning.note .wy-alert-title,.rst-content .wy-alert-warning.seealso .admonition-title,.rst-content .wy-alert-warning.seealso .wy-alert-title,.rst-content .wy-alert-warning.tip .admonition-title,.rst-content .wy-alert-warning.tip .wy-alert-title,.rst-content .wy-alert.wy-alert-warning .admonition-title,.wy-alert.wy-alert-warning .rst-content .admonition-title,.wy-alert.wy-alert-warning .wy-alert-title{background:#f0b37e}.rst-content .note,.rst-content .seealso,.rst-content .wy-alert-info.admonition,.rst-content .wy-alert-info.admonition-todo,.rst-content .wy-alert-info.attention,.rst-content .wy-alert-info.caution,.rst-content .wy-alert-info.danger,.rst-content .wy-alert-info.error,.rst-content .wy-alert-info.hint,.rst-content .wy-alert-info.important,.rst-content .wy-alert-info.tip,.rst-content .wy-alert-info.warning,.wy-alert.wy-alert-info{background:#e7f2fa}.rst-content .note .admonition-title,.rst-content .note .wy-alert-title,.rst-content .seealso .admonition-title,.rst-content .seealso .wy-alert-title,.rst-content .wy-alert-info.admonition-todo .admonition-title,.rst-content .wy-alert-info.admonition-todo .wy-alert-title,.rst-content .wy-alert-info.admonition .admonition-title,.rst-content .wy-alert-info.admonition .wy-alert-title,.rst-content .wy-alert-info.attention .admonition-title,.rst-content .wy-alert-info.attention .wy-alert-title,.rst-content .wy-alert-info.caution .admonition-title,.rst-content .wy-alert-info.caution .wy-alert-title,.rst-content .wy-alert-info.danger .admonition-title,.rst-content .wy-alert-info.danger .wy-alert-title,.rst-content .wy-alert-info.error .admonition-title,.rst-content .wy-alert-info.error .wy-alert-title,.rst-content .wy-alert-info.hint .admonition-title,.rst-content .wy-alert-info.hint .wy-alert-title,.rst-content .wy-alert-info.important .admonition-title,.rst-content .wy-alert-info.important .wy-alert-title,.rst-content .wy-alert-info.tip .admonition-title,.rst-content .wy-alert-info.tip .wy-alert-title,.rst-content .wy-alert-info.warning .admonition-title,.rst-content .wy-alert-info.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-info .admonition-title,.wy-alert.wy-alert-info .rst-content .admonition-title,.wy-alert.wy-alert-info .wy-alert-title{background:#6ab0de}.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .wy-alert-success.admonition,.rst-content .wy-alert-success.admonition-todo,.rst-content .wy-alert-success.attention,.rst-content .wy-alert-success.caution,.rst-content .wy-alert-success.danger,.rst-content .wy-alert-success.error,.rst-content .wy-alert-success.note,.rst-content .wy-alert-success.seealso,.rst-content .wy-alert-success.warning,.wy-alert.wy-alert-success{background:#dbfaf4}.rst-content .hint .admonition-title,.rst-content .hint .wy-alert-title,.rst-content .important .admonition-title,.rst-content .important .wy-alert-title,.rst-content .tip .admonition-title,.rst-content .tip .wy-alert-title,.rst-content .wy-alert-success.admonition-todo .admonition-title,.rst-content .wy-alert-success.admonition-todo .wy-alert-title,.rst-content .wy-alert-success.admonition .admonition-title,.rst-content .wy-alert-success.admonition .wy-alert-title,.rst-content .wy-alert-success.attention .admonition-title,.rst-content .wy-alert-success.attention .wy-alert-title,.rst-content .wy-alert-success.caution .admonition-title,.rst-content .wy-alert-success.caution .wy-alert-title,.rst-content .wy-alert-success.danger .admonition-title,.rst-content .wy-alert-success.danger .wy-alert-title,.rst-content .wy-alert-success.error .admonition-title,.rst-content .wy-alert-success.error .wy-alert-title,.rst-content .wy-alert-success.note .admonition-title,.rst-content .wy-alert-success.note .wy-alert-title,.rst-content .wy-alert-success.seealso .admonition-title,.rst-content .wy-alert-success.seealso .wy-alert-title,.rst-content .wy-alert-success.warning .admonition-title,.rst-content .wy-alert-success.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-success .admonition-title,.wy-alert.wy-alert-success .rst-content .admonition-title,.wy-alert.wy-alert-success .wy-alert-title{background:#1abc9c}.rst-content .wy-alert-neutral.admonition,.rst-content .wy-alert-neutral.admonition-todo,.rst-content .wy-alert-neutral.attention,.rst-content .wy-alert-neutral.caution,.rst-content .wy-alert-neutral.danger,.rst-content .wy-alert-neutral.error,.rst-content .wy-alert-neutral.hint,.rst-content .wy-alert-neutral.important,.rst-content .wy-alert-neutral.note,.rst-content .wy-alert-neutral.seealso,.rst-content .wy-alert-neutral.tip,.rst-content .wy-alert-neutral.warning,.wy-alert.wy-alert-neutral{background:#f3f6f6}.rst-content .wy-alert-neutral.admonition-todo .admonition-title,.rst-content .wy-alert-neutral.admonition-todo .wy-alert-title,.rst-content .wy-alert-neutral.admonition .admonition-title,.rst-content .wy-alert-neutral.admonition .wy-alert-title,.rst-content .wy-alert-neutral.attention .admonition-title,.rst-content .wy-alert-neutral.attention .wy-alert-title,.rst-content .wy-alert-neutral.caution .admonition-title,.rst-content .wy-alert-neutral.caution .wy-alert-title,.rst-content .wy-alert-neutral.danger .admonition-title,.rst-content .wy-alert-neutral.danger .wy-alert-title,.rst-content .wy-alert-neutral.error .admonition-title,.rst-content .wy-alert-neutral.error .wy-alert-title,.rst-content .wy-alert-neutral.hint .admonition-title,.rst-content .wy-alert-neutral.hint .wy-alert-title,.rst-content .wy-alert-neutral.important .admonition-title,.rst-content .wy-alert-neutral.important .wy-alert-title,.rst-content .wy-alert-neutral.note .admonition-title,.rst-content .wy-alert-neutral.note .wy-alert-title,.rst-content .wy-alert-neutral.seealso .admonition-title,.rst-content .wy-alert-neutral.seealso .wy-alert-title,.rst-content .wy-alert-neutral.tip .admonition-title,.rst-content .wy-alert-neutral.tip .wy-alert-title,.rst-content .wy-alert-neutral.warning .admonition-title,.rst-content .wy-alert-neutral.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-neutral .admonition-title,.wy-alert.wy-alert-neutral .rst-content .admonition-title,.wy-alert.wy-alert-neutral .wy-alert-title{color:#404040;background:#e1e4e5}.rst-content .wy-alert-neutral.admonition-todo a,.rst-content .wy-alert-neutral.admonition a,.rst-content .wy-alert-neutral.attention a,.rst-content .wy-alert-neutral.caution a,.rst-content .wy-alert-neutral.danger a,.rst-content .wy-alert-neutral.error a,.rst-content .wy-alert-neutral.hint a,.rst-content .wy-alert-neutral.important a,.rst-content .wy-alert-neutral.note a,.rst-content .wy-alert-neutral.seealso a,.rst-content .wy-alert-neutral.tip a,.rst-content .wy-alert-neutral.warning a,.wy-alert.wy-alert-neutral a{color:#2980b9}.rst-content .admonition-todo p:last-child,.rst-content .admonition p:last-child,.rst-content .attention p:last-child,.rst-content .caution p:last-child,.rst-content .danger p:last-child,.rst-content .error p:last-child,.rst-content .hint p:last-child,.rst-content .important p:last-child,.rst-content .note p:last-child,.rst-content .seealso p:last-child,.rst-content .tip p:last-child,.rst-content .warning p:last-child,.wy-alert p:last-child{margin-bottom:0}.wy-tray-container{position:fixed;bottom:0;left:0;z-index:600}.wy-tray-container li{display:block;width:300px;background:transparent;color:#fff;text-align:center;box-shadow:0 5px 5px 0 rgba(0,0,0,.1);padding:0 24px;min-width:20%;opacity:0;height:0;line-height:56px;overflow:hidden;-webkit-transition:all .3s ease-in;-moz-transition:all .3s ease-in;transition:all .3s ease-in}.wy-tray-container li.wy-tray-item-success{background:#27ae60}.wy-tray-container li.wy-tray-item-info{background:#2980b9}.wy-tray-container li.wy-tray-item-warning{background:#e67e22}.wy-tray-container li.wy-tray-item-danger{background:#e74c3c}.wy-tray-container li.on{opacity:1;height:56px}@media screen and (max-width:768px){.wy-tray-container{bottom:auto;top:0;width:100%}.wy-tray-container li{width:100%}}button{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle;cursor:pointer;line-height:normal;-webkit-appearance:button;*overflow:visible}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}button[disabled]{cursor:default}.btn{display:inline-block;border-radius:2px;line-height:normal;white-space:nowrap;text-align:center;cursor:pointer;font-size:100%;padding:6px 12px 8px;color:#fff;border:1px solid rgba(0,0,0,.1);background-color:#27ae60;text-decoration:none;font-weight:400;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 2px -1px hsla(0,0%,100%,.5),inset 0 -2px 0 0 rgba(0,0,0,.1);outline-none:false;vertical-align:middle;*display:inline;zoom:1;-webkit-user-drag:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transition:all .1s linear;-moz-transition:all .1s linear;transition:all .1s linear}.btn-hover{background:#2e8ece;color:#fff}.btn:hover{background:#2cc36b;color:#fff}.btn:focus{background:#2cc36b;outline:0}.btn:active{box-shadow:inset 0 -1px 0 0 rgba(0,0,0,.05),inset 0 2px 0 0 rgba(0,0,0,.1);padding:8px 12px 6px}.btn:visited{color:#fff}.btn-disabled,.btn-disabled:active,.btn-disabled:focus,.btn-disabled:hover,.btn:disabled{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:.4;cursor:not-allowed;box-shadow:none}.btn::-moz-focus-inner{padding:0;border:0}.btn-small{font-size:80%}.btn-info{background-color:#2980b9!important}.btn-info:hover{background-color:#2e8ece!important}.btn-neutral{background-color:#f3f6f6!important;color:#404040!important}.btn-neutral:hover{background-color:#e5ebeb!important;color:#404040}.btn-neutral:visited{color:#404040!important}.btn-success{background-color:#27ae60!important}.btn-success:hover{background-color:#295!important}.btn-danger{background-color:#e74c3c!important}.btn-danger:hover{background-color:#ea6153!important}.btn-warning{background-color:#e67e22!important}.btn-warning:hover{background-color:#e98b39!important}.btn-invert{background-color:#222}.btn-invert:hover{background-color:#2f2f2f!important}.btn-link{background-color:transparent!important;color:#2980b9;box-shadow:none;border-color:transparent!important}.btn-link:active,.btn-link:hover{background-color:transparent!important;color:#409ad5!important;box-shadow:none}.btn-link:visited{color:#9b59b6}.wy-btn-group .btn,.wy-control .btn{vertical-align:middle}.wy-btn-group{margin-bottom:24px;*zoom:1}.wy-btn-group:after,.wy-btn-group:before{display:table;content:""}.wy-btn-group:after{clear:both}.wy-dropdown{position:relative;display:inline-block}.wy-dropdown-active .wy-dropdown-menu{display:block}.wy-dropdown-menu{position:absolute;left:0;display:none;float:left;top:100%;min-width:100%;background:#fcfcfc;z-index:100;border:1px solid #cfd7dd;box-shadow:0 2px 2px 0 rgba(0,0,0,.1);padding:12px}.wy-dropdown-menu>dd>a{display:block;clear:both;color:#404040;white-space:nowrap;font-size:90%;padding:0 12px;cursor:pointer}.wy-dropdown-menu>dd>a:hover{background:#2980b9;color:#fff}.wy-dropdown-menu>dd.divider{border-top:1px solid #cfd7dd;margin:6px 0}.wy-dropdown-menu>dd.search{padding-bottom:12px}.wy-dropdown-menu>dd.search input[type=search]{width:100%}.wy-dropdown-menu>dd.call-to-action{background:#e3e3e3;text-transform:uppercase;font-weight:500;font-size:80%}.wy-dropdown-menu>dd.call-to-action:hover{background:#e3e3e3}.wy-dropdown-menu>dd.call-to-action .btn{color:#fff}.wy-dropdown.wy-dropdown-up .wy-dropdown-menu{bottom:100%;top:auto;left:auto;right:0}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu{background:#fcfcfc;margin-top:2px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a{padding:6px 12px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a:hover{background:#2980b9;color:#fff}.wy-dropdown.wy-dropdown-left .wy-dropdown-menu{right:0;left:auto;text-align:right}.wy-dropdown-arrow:before{content:" ";border-bottom:5px solid #f5f5f5;border-left:5px solid transparent;border-right:5px solid transparent;position:absolute;display:block;top:-4px;left:50%;margin-left:-3px}.wy-dropdown-arrow.wy-dropdown-arrow-left:before{left:11px}.wy-form-stacked select{display:block}.wy-form-aligned .wy-help-inline,.wy-form-aligned input,.wy-form-aligned label,.wy-form-aligned select,.wy-form-aligned textarea{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-form-aligned .wy-control-group>label{display:inline-block;vertical-align:middle;width:10em;margin:6px 12px 0 0;float:left}.wy-form-aligned .wy-control{float:left}.wy-form-aligned .wy-control label{display:block}.wy-form-aligned .wy-control select{margin-top:6px}fieldset{margin:0}fieldset,legend{border:0;padding:0}legend{width:100%;white-space:normal;margin-bottom:24px;font-size:150%;*margin-left:-7px}label,legend{display:block}label{margin:0 0 .3125em;color:#333;font-size:90%}input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}.wy-control-group{margin-bottom:24px;max-width:1200px;margin-left:auto;margin-right:auto;*zoom:1}.wy-control-group:after,.wy-control-group:before{display:table;content:""}.wy-control-group:after{clear:both}.wy-control-group.wy-control-group-required>label:after{content:" *";color:#e74c3c}.wy-control-group .wy-form-full,.wy-control-group .wy-form-halves,.wy-control-group .wy-form-thirds{padding-bottom:12px}.wy-control-group .wy-form-full input[type=color],.wy-control-group .wy-form-full input[type=date],.wy-control-group .wy-form-full input[type=datetime-local],.wy-control-group .wy-form-full input[type=datetime],.wy-control-group .wy-form-full input[type=email],.wy-control-group .wy-form-full input[type=month],.wy-control-group .wy-form-full input[type=number],.wy-control-group .wy-form-full input[type=password],.wy-control-group .wy-form-full input[type=search],.wy-control-group .wy-form-full input[type=tel],.wy-control-group .wy-form-full input[type=text],.wy-control-group .wy-form-full input[type=time],.wy-control-group .wy-form-full input[type=url],.wy-control-group .wy-form-full input[type=week],.wy-control-group .wy-form-full select,.wy-control-group .wy-form-halves input[type=color],.wy-control-group .wy-form-halves input[type=date],.wy-control-group .wy-form-halves input[type=datetime-local],.wy-control-group .wy-form-halves input[type=datetime],.wy-control-group .wy-form-halves input[type=email],.wy-control-group .wy-form-halves input[type=month],.wy-control-group .wy-form-halves input[type=number],.wy-control-group .wy-form-halves input[type=password],.wy-control-group .wy-form-halves input[type=search],.wy-control-group .wy-form-halves input[type=tel],.wy-control-group .wy-form-halves input[type=text],.wy-control-group .wy-form-halves input[type=time],.wy-control-group .wy-form-halves input[type=url],.wy-control-group .wy-form-halves input[type=week],.wy-control-group .wy-form-halves select,.wy-control-group .wy-form-thirds input[type=color],.wy-control-group .wy-form-thirds input[type=date],.wy-control-group .wy-form-thirds input[type=datetime-local],.wy-control-group .wy-form-thirds input[type=datetime],.wy-control-group .wy-form-thirds input[type=email],.wy-control-group .wy-form-thirds input[type=month],.wy-control-group .wy-form-thirds input[type=number],.wy-control-group .wy-form-thirds input[type=password],.wy-control-group .wy-form-thirds input[type=search],.wy-control-group .wy-form-thirds input[type=tel],.wy-control-group .wy-form-thirds input[type=text],.wy-control-group .wy-form-thirds input[type=time],.wy-control-group .wy-form-thirds input[type=url],.wy-control-group .wy-form-thirds input[type=week],.wy-control-group .wy-form-thirds select{width:100%}.wy-control-group .wy-form-full{float:left;display:block;width:100%;margin-right:0}.wy-control-group .wy-form-full:last-child{margin-right:0}.wy-control-group .wy-form-halves{float:left;display:block;margin-right:2.35765%;width:48.82117%}.wy-control-group .wy-form-halves:last-child,.wy-control-group .wy-form-halves:nth-of-type(2n){margin-right:0}.wy-control-group .wy-form-halves:nth-of-type(odd){clear:left}.wy-control-group .wy-form-thirds{float:left;display:block;margin-right:2.35765%;width:31.76157%}.wy-control-group .wy-form-thirds:last-child,.wy-control-group .wy-form-thirds:nth-of-type(3n){margin-right:0}.wy-control-group .wy-form-thirds:nth-of-type(3n+1){clear:left}.wy-control-group.wy-control-group-no-input .wy-control,.wy-control-no-input{margin:6px 0 0;font-size:90%}.wy-control-no-input{display:inline-block}.wy-control-group.fluid-input input[type=color],.wy-control-group.fluid-input input[type=date],.wy-control-group.fluid-input input[type=datetime-local],.wy-control-group.fluid-input input[type=datetime],.wy-control-group.fluid-input input[type=email],.wy-control-group.fluid-input input[type=month],.wy-control-group.fluid-input input[type=number],.wy-control-group.fluid-input input[type=password],.wy-control-group.fluid-input input[type=search],.wy-control-group.fluid-input input[type=tel],.wy-control-group.fluid-input input[type=text],.wy-control-group.fluid-input input[type=time],.wy-control-group.fluid-input input[type=url],.wy-control-group.fluid-input input[type=week]{width:100%}.wy-form-message-inline{padding-left:.3em;color:#666;font-size:90%}.wy-form-message{display:block;color:#999;font-size:70%;margin-top:.3125em;font-style:italic}.wy-form-message p{font-size:inherit;font-style:italic;margin-bottom:6px}.wy-form-message p:last-child{margin-bottom:0}input{line-height:normal}input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;*overflow:visible}input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week]{-webkit-appearance:none;padding:6px;display:inline-block;border:1px solid #ccc;font-size:80%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 3px #ddd;border-radius:0;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}input[type=datetime-local]{padding:.34375em .625em}input[disabled]{cursor:default}input[type=checkbox],input[type=radio]{padding:0;margin-right:.3125em;*height:13px;*width:13px}input[type=checkbox],input[type=radio],input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}input[type=color]:focus,input[type=date]:focus,input[type=datetime-local]:focus,input[type=datetime]:focus,input[type=email]:focus,input[type=month]:focus,input[type=number]:focus,input[type=password]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=time]:focus,input[type=url]:focus,input[type=week]:focus{outline:0;outline:thin dotted\9;border-color:#333}input.no-focus:focus{border-color:#ccc!important}input[type=checkbox]:focus,input[type=file]:focus,input[type=radio]:focus{outline:thin dotted #333;outline:1px auto #129fea}input[type=color][disabled],input[type=date][disabled],input[type=datetime-local][disabled],input[type=datetime][disabled],input[type=email][disabled],input[type=month][disabled],input[type=number][disabled],input[type=password][disabled],input[type=search][disabled],input[type=tel][disabled],input[type=text][disabled],input[type=time][disabled],input[type=url][disabled],input[type=week][disabled]{cursor:not-allowed;background-color:#fafafa}input:focus:invalid,select:focus:invalid,textarea:focus:invalid{color:#e74c3c;border:1px solid #e74c3c}input:focus:invalid:focus,select:focus:invalid:focus,textarea:focus:invalid:focus{border-color:#e74c3c}input[type=checkbox]:focus:invalid:focus,input[type=file]:focus:invalid:focus,input[type=radio]:focus:invalid:focus{outline-color:#e74c3c}input.wy-input-large{padding:12px;font-size:100%}textarea{overflow:auto;vertical-align:top;width:100%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif}select,textarea{padding:.5em .625em;display:inline-block;border:1px solid #ccc;font-size:80%;box-shadow:inset 0 1px 3px #ddd;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}select{border:1px solid #ccc;background-color:#fff}select[multiple]{height:auto}select:focus,textarea:focus{outline:0}input[readonly],select[disabled],select[readonly],textarea[disabled],textarea[readonly]{cursor:not-allowed;background-color:#fafafa}input[type=checkbox][disabled],input[type=radio][disabled]{cursor:not-allowed}.wy-checkbox,.wy-radio{margin:6px 0;color:#404040;display:block}.wy-checkbox input,.wy-radio input{vertical-align:baseline}.wy-form-message-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-input-prefix,.wy-input-suffix{white-space:nowrap;padding:6px}.wy-input-prefix .wy-input-context,.wy-input-suffix .wy-input-context{line-height:27px;padding:0 8px;display:inline-block;font-size:80%;background-color:#f3f6f6;border:1px solid #ccc;color:#999}.wy-input-suffix .wy-input-context{border-left:0}.wy-input-prefix .wy-input-context{border-right:0}.wy-switch{position:relative;display:block;height:24px;margin-top:12px;cursor:pointer}.wy-switch:before{left:0;top:0;width:36px;height:12px;background:#ccc}.wy-switch:after,.wy-switch:before{position:absolute;content:"";display:block;border-radius:4px;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.wy-switch:after{width:18px;height:18px;background:#999;left:-3px;top:-3px}.wy-switch span{position:absolute;left:48px;display:block;font-size:12px;color:#ccc;line-height:1}.wy-switch.active:before{background:#1e8449}.wy-switch.active:after{left:24px;background:#27ae60}.wy-switch.disabled{cursor:not-allowed;opacity:.8}.wy-control-group.wy-control-group-error .wy-form-message,.wy-control-group.wy-control-group-error>label{color:#e74c3c}.wy-control-group.wy-control-group-error input[type=color],.wy-control-group.wy-control-group-error input[type=date],.wy-control-group.wy-control-group-error input[type=datetime-local],.wy-control-group.wy-control-group-error input[type=datetime],.wy-control-group.wy-control-group-error input[type=email],.wy-control-group.wy-control-group-error input[type=month],.wy-control-group.wy-control-group-error input[type=number],.wy-control-group.wy-control-group-error input[type=password],.wy-control-group.wy-control-group-error input[type=search],.wy-control-group.wy-control-group-error input[type=tel],.wy-control-group.wy-control-group-error input[type=text],.wy-control-group.wy-control-group-error input[type=time],.wy-control-group.wy-control-group-error input[type=url],.wy-control-group.wy-control-group-error input[type=week],.wy-control-group.wy-control-group-error textarea{border:1px solid #e74c3c}.wy-inline-validate{white-space:nowrap}.wy-inline-validate .wy-input-context{padding:.5em .625em;display:inline-block;font-size:80%}.wy-inline-validate.wy-inline-validate-success .wy-input-context{color:#27ae60}.wy-inline-validate.wy-inline-validate-danger .wy-input-context{color:#e74c3c}.wy-inline-validate.wy-inline-validate-warning .wy-input-context{color:#e67e22}.wy-inline-validate.wy-inline-validate-info .wy-input-context{color:#2980b9}.rotate-90{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.rotate-180{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.rotate-270{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.mirror{-webkit-transform:scaleX(-1);-moz-transform:scaleX(-1);-ms-transform:scaleX(-1);-o-transform:scaleX(-1);transform:scaleX(-1)}.mirror.rotate-90{-webkit-transform:scaleX(-1) rotate(90deg);-moz-transform:scaleX(-1) rotate(90deg);-ms-transform:scaleX(-1) rotate(90deg);-o-transform:scaleX(-1) rotate(90deg);transform:scaleX(-1) rotate(90deg)}.mirror.rotate-180{-webkit-transform:scaleX(-1) rotate(180deg);-moz-transform:scaleX(-1) rotate(180deg);-ms-transform:scaleX(-1) rotate(180deg);-o-transform:scaleX(-1) rotate(180deg);transform:scaleX(-1) rotate(180deg)}.mirror.rotate-270{-webkit-transform:scaleX(-1) rotate(270deg);-moz-transform:scaleX(-1) rotate(270deg);-ms-transform:scaleX(-1) rotate(270deg);-o-transform:scaleX(-1) rotate(270deg);transform:scaleX(-1) rotate(270deg)}@media only screen and (max-width:480px){.wy-form button[type=submit]{margin:.7em 0 0}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=text],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week],.wy-form label{margin-bottom:.3em;display:block}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week]{margin-bottom:0}.wy-form-aligned .wy-control-group label{margin-bottom:.3em;text-align:left;display:block;width:100%}.wy-form-aligned .wy-control{margin:1.5em 0 0}.wy-form-message,.wy-form-message-inline,.wy-form .wy-help-inline{display:block;font-size:80%;padding:6px 0}}@media screen and (max-width:768px){.tablet-hide{display:none}}@media screen and (max-width:480px){.mobile-hide{display:none}}.float-left{float:left}.float-right{float:right}.full-width{width:100%}.rst-content table.docutils,.rst-content table.field-list,.wy-table{border-collapse:collapse;border-spacing:0;empty-cells:show;margin-bottom:24px}.rst-content table.docutils caption,.rst-content table.field-list caption,.wy-table caption{color:#000;font:italic 85%/1 arial,sans-serif;padding:1em 0;text-align:center}.rst-content table.docutils td,.rst-content table.docutils th,.rst-content table.field-list td,.rst-content table.field-list th,.wy-table td,.wy-table th{font-size:90%;margin:0;overflow:visible;padding:8px 16px}.rst-content table.docutils td:first-child,.rst-content table.docutils th:first-child,.rst-content table.field-list td:first-child,.rst-content table.field-list th:first-child,.wy-table td:first-child,.wy-table th:first-child{border-left-width:0}.rst-content table.docutils thead,.rst-content table.field-list thead,.wy-table thead{color:#000;text-align:left;vertical-align:bottom;white-space:nowrap}.rst-content table.docutils thead th,.rst-content table.field-list thead th,.wy-table thead th{font-weight:700;border-bottom:2px solid #e1e4e5}.rst-content table.docutils td,.rst-content table.field-list td,.wy-table td{background-color:transparent;vertical-align:middle}.rst-content table.docutils td p,.rst-content table.field-list td p,.wy-table td p{line-height:18px}.rst-content table.docutils td p:last-child,.rst-content table.field-list td p:last-child,.wy-table td p:last-child{margin-bottom:0}.rst-content table.docutils .wy-table-cell-min,.rst-content table.field-list .wy-table-cell-min,.wy-table .wy-table-cell-min{width:1%;padding-right:0}.rst-content table.docutils .wy-table-cell-min input[type=checkbox],.rst-content table.field-list .wy-table-cell-min input[type=checkbox],.wy-table .wy-table-cell-min input[type=checkbox]{margin:0}.wy-table-secondary{color:grey;font-size:90%}.wy-table-tertiary{color:grey;font-size:80%}.rst-content table.docutils:not(.field-list) tr:nth-child(2n-1) td,.wy-table-backed,.wy-table-odd td,.wy-table-striped tr:nth-child(2n-1) td{background-color:#f3f6f6}.rst-content table.docutils,.wy-table-bordered-all{border:1px solid #e1e4e5}.rst-content table.docutils td,.wy-table-bordered-all td{border-bottom:1px solid #e1e4e5;border-left:1px solid #e1e4e5}.rst-content table.docutils tbody>tr:last-child td,.wy-table-bordered-all tbody>tr:last-child td{border-bottom-width:0}.wy-table-bordered{border:1px solid #e1e4e5}.wy-table-bordered-rows td{border-bottom:1px solid #e1e4e5}.wy-table-bordered-rows tbody>tr:last-child td{border-bottom-width:0}.wy-table-horizontal td,.wy-table-horizontal th{border-width:0 0 1px;border-bottom:1px solid #e1e4e5}.wy-table-horizontal tbody>tr:last-child td{border-bottom-width:0}.wy-table-responsive{margin-bottom:24px;max-width:100%;overflow:auto}.wy-table-responsive table{margin-bottom:0!important}.wy-table-responsive table td,.wy-table-responsive table th{white-space:nowrap}a{color:#2980b9;text-decoration:none;cursor:pointer}a:hover{color:#3091d1}a:visited{color:#9b59b6}html{height:100%}body,html{overflow-x:hidden}body{font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;font-weight:400;color:#404040;min-height:100%;background:#edf0f2}.wy-text-left{text-align:left}.wy-text-center{text-align:center}.wy-text-right{text-align:right}.wy-text-large{font-size:120%}.wy-text-normal{font-size:100%}.wy-text-small,small{font-size:80%}.wy-text-strike{text-decoration:line-through}.wy-text-warning{color:#e67e22!important}a.wy-text-warning:hover{color:#eb9950!important}.wy-text-info{color:#2980b9!important}a.wy-text-info:hover{color:#409ad5!important}.wy-text-success{color:#27ae60!important}a.wy-text-success:hover{color:#36d278!important}.wy-text-danger{color:#e74c3c!important}a.wy-text-danger:hover{color:#ed7669!important}.wy-text-neutral{color:#404040!important}a.wy-text-neutral:hover{color:#595959!important}.rst-content .toctree-wrapper>p.caption,h1,h2,h3,h4,h5,h6,legend{margin-top:0;font-weight:700;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif}p{line-height:24px;font-size:16px;margin:0 0 24px}h1{font-size:175%}.rst-content .toctree-wrapper>p.caption,h2{font-size:150%}h3{font-size:125%}h4{font-size:115%}h5{font-size:110%}h6{font-size:100%}hr{display:block;height:1px;border:0;border-top:1px solid #e1e4e5;margin:24px 0;padding:0}.rst-content code,.rst-content tt,code{white-space:nowrap;max-width:100%;background:#fff;border:1px solid #e1e4e5;font-size:75%;padding:0 5px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#e74c3c;overflow-x:auto}.rst-content tt.code-large,code.code-large{font-size:90%}.rst-content .section ul,.rst-content .toctree-wrapper ul,.rst-content section ul,.wy-plain-list-disc,article ul{list-style:disc;line-height:24px;margin-bottom:24px}.rst-content .section ul li,.rst-content .toctree-wrapper ul li,.rst-content section ul li,.wy-plain-list-disc li,article ul li{list-style:disc;margin-left:24px}.rst-content .section ul li p:last-child,.rst-content .section ul li ul,.rst-content .toctree-wrapper ul li p:last-child,.rst-content .toctree-wrapper ul li ul,.rst-content section ul li p:last-child,.rst-content section ul li ul,.wy-plain-list-disc li p:last-child,.wy-plain-list-disc li ul,article ul li p:last-child,article ul li ul{margin-bottom:0}.rst-content .section ul li li,.rst-content .toctree-wrapper ul li li,.rst-content section ul li li,.wy-plain-list-disc li li,article ul li li{list-style:circle}.rst-content .section ul li li li,.rst-content .toctree-wrapper ul li li li,.rst-content section ul li li li,.wy-plain-list-disc li li li,article ul li li li{list-style:square}.rst-content .section ul li ol li,.rst-content .toctree-wrapper ul li ol li,.rst-content section ul li ol li,.wy-plain-list-disc li ol li,article ul li ol li{list-style:decimal}.rst-content .section ol,.rst-content .section ol.arabic,.rst-content .toctree-wrapper ol,.rst-content .toctree-wrapper ol.arabic,.rst-content section ol,.rst-content section ol.arabic,.wy-plain-list-decimal,article ol{list-style:decimal;line-height:24px;margin-bottom:24px}.rst-content .section ol.arabic li,.rst-content .section ol li,.rst-content .toctree-wrapper ol.arabic li,.rst-content .toctree-wrapper ol li,.rst-content section ol.arabic li,.rst-content section ol li,.wy-plain-list-decimal li,article ol li{list-style:decimal;margin-left:24px}.rst-content .section ol.arabic li ul,.rst-content .section ol li p:last-child,.rst-content .section ol li ul,.rst-content .toctree-wrapper ol.arabic li ul,.rst-content .toctree-wrapper ol li p:last-child,.rst-content .toctree-wrapper ol li ul,.rst-content section ol.arabic li ul,.rst-content section ol li p:last-child,.rst-content section ol li ul,.wy-plain-list-decimal li p:last-child,.wy-plain-list-decimal li ul,article ol li p:last-child,article ol li ul{margin-bottom:0}.rst-content .section ol.arabic li ul li,.rst-content .section ol li ul li,.rst-content .toctree-wrapper ol.arabic li ul li,.rst-content .toctree-wrapper ol li ul li,.rst-content section ol.arabic li ul li,.rst-content section ol li ul li,.wy-plain-list-decimal li ul li,article ol li ul li{list-style:disc}.wy-breadcrumbs{*zoom:1}.wy-breadcrumbs:after,.wy-breadcrumbs:before{display:table;content:""}.wy-breadcrumbs:after{clear:both}.wy-breadcrumbs>li{display:inline-block;padding-top:5px}.wy-breadcrumbs>li.wy-breadcrumbs-aside{float:right}.rst-content .wy-breadcrumbs>li code,.rst-content .wy-breadcrumbs>li tt,.wy-breadcrumbs>li .rst-content tt,.wy-breadcrumbs>li code{all:inherit;color:inherit}.breadcrumb-item:before{content:"/";color:#bbb;font-size:13px;padding:0 6px 0 3px}.wy-breadcrumbs-extra{margin-bottom:0;color:#b3b3b3;font-size:80%;display:inline-block}@media screen and (max-width:480px){.wy-breadcrumbs-extra,.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}@media print{.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}html{font-size:16px}.wy-affix{position:fixed;top:1.618em}.wy-menu a:hover{text-decoration:none}.wy-menu-horiz{*zoom:1}.wy-menu-horiz:after,.wy-menu-horiz:before{display:table;content:""}.wy-menu-horiz:after{clear:both}.wy-menu-horiz li,.wy-menu-horiz ul{display:inline-block}.wy-menu-horiz li:hover{background:hsla(0,0%,100%,.1)}.wy-menu-horiz li.divide-left{border-left:1px solid #404040}.wy-menu-horiz li.divide-right{border-right:1px solid #404040}.wy-menu-horiz a{height:32px;display:inline-block;line-height:32px;padding:0 16px}.wy-menu-vertical{width:300px}.wy-menu-vertical header,.wy-menu-vertical p.caption{color:#55a5d9;height:32px;line-height:32px;padding:0 1.618em;margin:12px 0 0;display:block;font-weight:700;text-transform:uppercase;font-size:85%;white-space:nowrap}.wy-menu-vertical ul{margin-bottom:0}.wy-menu-vertical li.divide-top{border-top:1px solid #404040}.wy-menu-vertical li.divide-bottom{border-bottom:1px solid #404040}.wy-menu-vertical li.current{background:#e3e3e3}.wy-menu-vertical li.current a{color:grey;border-right:1px solid #c9c9c9;padding:.4045em 2.427em}.wy-menu-vertical li.current a:hover{background:#d6d6d6}.rst-content .wy-menu-vertical li tt,.wy-menu-vertical li .rst-content tt,.wy-menu-vertical li code{border:none;background:inherit;color:inherit;padding-left:0;padding-right:0}.wy-menu-vertical li button.toctree-expand{display:block;float:left;margin-left:-1.2em;line-height:18px;color:#4d4d4d;border:none;background:none;padding:0}.wy-menu-vertical li.current>a,.wy-menu-vertical li.on a{color:#404040;font-weight:700;position:relative;background:#fcfcfc;border:none;padding:.4045em 1.618em}.wy-menu-vertical li.current>a:hover,.wy-menu-vertical li.on a:hover{background:#fcfcfc}.wy-menu-vertical li.current>a:hover button.toctree-expand,.wy-menu-vertical li.on a:hover button.toctree-expand{color:grey}.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand{display:block;line-height:18px;color:#333}.wy-menu-vertical li.toctree-l1.current>a{border-bottom:1px solid #c9c9c9;border-top:1px solid #c9c9c9}.wy-menu-vertical .toctree-l1.current .toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .toctree-l11>ul{display:none}.wy-menu-vertical .toctree-l1.current .current.toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .current.toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .current.toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .current.toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .current.toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .current.toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .current.toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .current.toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .current.toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .current.toctree-l11>ul{display:block}.wy-menu-vertical li.toctree-l3,.wy-menu-vertical li.toctree-l4{font-size:.9em}.wy-menu-vertical li.toctree-l2 a,.wy-menu-vertical li.toctree-l3 a,.wy-menu-vertical li.toctree-l4 a,.wy-menu-vertical li.toctree-l5 a,.wy-menu-vertical li.toctree-l6 a,.wy-menu-vertical li.toctree-l7 a,.wy-menu-vertical li.toctree-l8 a,.wy-menu-vertical li.toctree-l9 a,.wy-menu-vertical li.toctree-l10 a{color:#404040}.wy-menu-vertical li.toctree-l2 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l3 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l4 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l5 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l6 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l7 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l8 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l9 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l10 a:hover button.toctree-expand{color:grey}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a,.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a,.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a,.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a,.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a,.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a,.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a,.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{display:block}.wy-menu-vertical li.toctree-l2.current>a{padding:.4045em 2.427em}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{padding:.4045em 1.618em .4045em 4.045em}.wy-menu-vertical li.toctree-l3.current>a{padding:.4045em 4.045em}.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{padding:.4045em 1.618em .4045em 5.663em}.wy-menu-vertical li.toctree-l4.current>a{padding:.4045em 5.663em}.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a{padding:.4045em 1.618em .4045em 7.281em}.wy-menu-vertical li.toctree-l5.current>a{padding:.4045em 7.281em}.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a{padding:.4045em 1.618em .4045em 8.899em}.wy-menu-vertical li.toctree-l6.current>a{padding:.4045em 8.899em}.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a{padding:.4045em 1.618em .4045em 10.517em}.wy-menu-vertical li.toctree-l7.current>a{padding:.4045em 10.517em}.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a{padding:.4045em 1.618em .4045em 12.135em}.wy-menu-vertical li.toctree-l8.current>a{padding:.4045em 12.135em}.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a{padding:.4045em 1.618em .4045em 13.753em}.wy-menu-vertical li.toctree-l9.current>a{padding:.4045em 13.753em}.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a{padding:.4045em 1.618em .4045em 15.371em}.wy-menu-vertical li.toctree-l10.current>a{padding:.4045em 15.371em}.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{padding:.4045em 1.618em .4045em 16.989em}.wy-menu-vertical li.toctree-l2.current>a,.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{background:#c9c9c9}.wy-menu-vertical li.toctree-l2 button.toctree-expand{color:#a3a3a3}.wy-menu-vertical li.toctree-l3.current>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{background:#bdbdbd}.wy-menu-vertical li.toctree-l3 button.toctree-expand{color:#969696}.wy-menu-vertical li.current ul{display:block}.wy-menu-vertical li ul{margin-bottom:0;display:none}.wy-menu-vertical li ul li a{margin-bottom:0;color:#d9d9d9;font-weight:400}.wy-menu-vertical a{line-height:18px;padding:.4045em 1.618em;display:block;position:relative;font-size:90%;color:#d9d9d9}.wy-menu-vertical a:hover{background-color:#4e4a4a;cursor:pointer}.wy-menu-vertical a:hover button.toctree-expand{color:#d9d9d9}.wy-menu-vertical a:active{background-color:#2980b9;cursor:pointer;color:#fff}.wy-menu-vertical a:active button.toctree-expand{color:#fff}.wy-side-nav-search{display:block;width:300px;padding:.809em;margin-bottom:.809em;z-index:200;background-color:#2980b9;text-align:center;color:#fcfcfc}.wy-side-nav-search input[type=text]{width:100%;border-radius:50px;padding:6px 12px;border-color:#2472a4}.wy-side-nav-search img{display:block;margin:auto auto .809em;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-side-nav-search .wy-dropdown>a,.wy-side-nav-search>a{color:#fcfcfc;font-size:100%;font-weight:700;display:inline-block;padding:4px 6px;margin-bottom:.809em;max-width:100%}.wy-side-nav-search .wy-dropdown>a:hover,.wy-side-nav-search>a:hover{background:hsla(0,0%,100%,.1)}.wy-side-nav-search .wy-dropdown>a img.logo,.wy-side-nav-search>a img.logo{display:block;margin:0 auto;height:auto;width:auto;border-radius:0;max-width:100%;background:transparent}.wy-side-nav-search .wy-dropdown>a.icon img.logo,.wy-side-nav-search>a.icon img.logo{margin-top:.85em}.wy-side-nav-search>div.version{margin-top:-.4045em;margin-bottom:.809em;font-weight:400;color:hsla(0,0%,100%,.3)}.wy-nav .wy-menu-vertical header{color:#2980b9}.wy-nav .wy-menu-vertical a{color:#b3b3b3}.wy-nav .wy-menu-vertical a:hover{background-color:#2980b9;color:#fff}[data-menu-wrap]{-webkit-transition:all .2s ease-in;-moz-transition:all .2s ease-in;transition:all .2s ease-in;position:absolute;opacity:1;width:100%;opacity:0}[data-menu-wrap].move-center{left:0;right:auto;opacity:1}[data-menu-wrap].move-left{right:auto;left:-100%;opacity:0}[data-menu-wrap].move-right{right:-100%;left:auto;opacity:0}.wy-body-for-nav{background:#fcfcfc}.wy-grid-for-nav{position:absolute;width:100%;height:100%}.wy-nav-side{position:fixed;top:0;bottom:0;left:0;padding-bottom:2em;width:300px;overflow-x:hidden;overflow-y:hidden;min-height:100%;color:#9b9b9b;background:#343131;z-index:200}.wy-side-scroll{width:320px;position:relative;overflow-x:hidden;overflow-y:scroll;height:100%}.wy-nav-top{display:none;background:#2980b9;color:#fff;padding:.4045em .809em;position:relative;line-height:50px;text-align:center;font-size:100%;*zoom:1}.wy-nav-top:after,.wy-nav-top:before{display:table;content:""}.wy-nav-top:after{clear:both}.wy-nav-top a{color:#fff;font-weight:700}.wy-nav-top img{margin-right:12px;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-nav-top i{font-size:30px;float:left;cursor:pointer;padding-top:inherit}.wy-nav-content-wrap{margin-left:300px;background:#fcfcfc;min-height:100%}.wy-nav-content{padding:1.618em 3.236em;height:100%;max-width:800px;margin:auto}.wy-body-mask{position:fixed;width:100%;height:100%;background:rgba(0,0,0,.2);display:none;z-index:499}.wy-body-mask.on{display:block}footer{color:grey}footer p{margin-bottom:12px}.rst-content footer span.commit tt,footer span.commit .rst-content tt,footer span.commit code{padding:0;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:1em;background:none;border:none;color:grey}.rst-footer-buttons{*zoom:1}.rst-footer-buttons:after,.rst-footer-buttons:before{width:100%;display:table;content:""}.rst-footer-buttons:after{clear:both}.rst-breadcrumbs-buttons{margin-top:12px;*zoom:1}.rst-breadcrumbs-buttons:after,.rst-breadcrumbs-buttons:before{display:table;content:""}.rst-breadcrumbs-buttons:after{clear:both}#search-results .search li{margin-bottom:24px;border-bottom:1px solid #e1e4e5;padding-bottom:24px}#search-results .search li:first-child{border-top:1px solid #e1e4e5;padding-top:24px}#search-results .search li a{font-size:120%;margin-bottom:12px;display:inline-block}#search-results .context{color:grey;font-size:90%}.genindextable li>ul{margin-left:24px}@media screen and (max-width:768px){.wy-body-for-nav{background:#fcfcfc}.wy-nav-top{display:block}.wy-nav-side{left:-300px}.wy-nav-side.shift{width:85%;left:0}.wy-menu.wy-menu-vertical,.wy-side-nav-search,.wy-side-scroll{width:auto}.wy-nav-content-wrap{margin-left:0}.wy-nav-content-wrap .wy-nav-content{padding:1.618em}.wy-nav-content-wrap.shift{position:fixed;min-width:100%;left:85%;top:0;height:100%;overflow:hidden}}@media screen and (min-width:1100px){.wy-nav-content-wrap{background:rgba(0,0,0,.05)}.wy-nav-content{margin:0;background:#fcfcfc}}@media print{.rst-versions,.wy-nav-side,footer{display:none}.wy-nav-content-wrap{margin-left:0}}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60;*zoom:1}.rst-versions .rst-current-version:after,.rst-versions .rst-current-version:before{display:table;content:""}.rst-versions .rst-current-version:after{clear:both}.rst-content .code-block-caption .rst-versions .rst-current-version .headerlink,.rst-content .eqno .rst-versions .rst-current-version .headerlink,.rst-content .rst-versions .rst-current-version .admonition-title,.rst-content code.download .rst-versions .rst-current-version span:first-child,.rst-content dl dt .rst-versions .rst-current-version .headerlink,.rst-content h1 .rst-versions .rst-current-version .headerlink,.rst-content h2 .rst-versions .rst-current-version .headerlink,.rst-content h3 .rst-versions .rst-current-version .headerlink,.rst-content h4 .rst-versions .rst-current-version .headerlink,.rst-content h5 .rst-versions .rst-current-version .headerlink,.rst-content h6 .rst-versions .rst-current-version .headerlink,.rst-content p .rst-versions .rst-current-version .headerlink,.rst-content table>caption .rst-versions .rst-current-version .headerlink,.rst-content tt.download .rst-versions .rst-current-version span:first-child,.rst-versions .rst-current-version .fa,.rst-versions .rst-current-version .icon,.rst-versions .rst-current-version .rst-content .admonition-title,.rst-versions .rst-current-version .rst-content .code-block-caption .headerlink,.rst-versions .rst-current-version .rst-content .eqno .headerlink,.rst-versions .rst-current-version .rst-content code.download span:first-child,.rst-versions .rst-current-version .rst-content dl dt .headerlink,.rst-versions .rst-current-version .rst-content h1 .headerlink,.rst-versions .rst-current-version .rst-content h2 .headerlink,.rst-versions .rst-current-version .rst-content h3 .headerlink,.rst-versions .rst-current-version .rst-content h4 .headerlink,.rst-versions .rst-current-version .rst-content h5 .headerlink,.rst-versions .rst-current-version .rst-content h6 .headerlink,.rst-versions .rst-current-version .rst-content p .headerlink,.rst-versions .rst-current-version .rst-content table>caption .headerlink,.rst-versions .rst-current-version .rst-content tt.download span:first-child,.rst-versions .rst-current-version .wy-menu-vertical li button.toctree-expand,.wy-menu-vertical li .rst-versions .rst-current-version button.toctree-expand{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}}.rst-content .toctree-wrapper>p.caption,.rst-content h1,.rst-content h2,.rst-content h3,.rst-content h4,.rst-content h5,.rst-content h6{margin-bottom:24px}.rst-content img{max-width:100%;height:auto}.rst-content div.figure,.rst-content figure{margin-bottom:24px}.rst-content div.figure .caption-text,.rst-content figure .caption-text{font-style:italic}.rst-content div.figure p:last-child.caption,.rst-content figure p:last-child.caption{margin-bottom:0}.rst-content div.figure.align-center,.rst-content figure.align-center{text-align:center}.rst-content .section>a>img,.rst-content .section>img,.rst-content section>a>img,.rst-content section>img{margin-bottom:24px}.rst-content abbr[title]{text-decoration:none}.rst-content.style-external-links a.reference.external:after{font-family:FontAwesome;content:"\f08e";color:#b3b3b3;vertical-align:super;font-size:60%;margin:0 .2em}.rst-content blockquote{margin-left:24px;line-height:24px;margin-bottom:24px}.rst-content pre.literal-block{white-space:pre;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;display:block;overflow:auto}.rst-content div[class^=highlight],.rst-content pre.literal-block{border:1px solid #e1e4e5;overflow-x:auto;margin:1px 0 24px}.rst-content div[class^=highlight] div[class^=highlight],.rst-content pre.literal-block div[class^=highlight]{padding:0;border:none;margin:0}.rst-content div[class^=highlight] td.code{width:100%}.rst-content .linenodiv pre{border-right:1px solid #e6e9ea;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;user-select:none;pointer-events:none}.rst-content div[class^=highlight] pre{white-space:pre;margin:0;padding:12px;display:block;overflow:auto}.rst-content div[class^=highlight] pre .hll{display:block;margin:0 -12px;padding:0 12px}.rst-content .linenodiv pre,.rst-content div[class^=highlight] pre,.rst-content pre.literal-block{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:12px;line-height:1.4}.rst-content div.highlight .gp,.rst-content div.highlight span.linenos{user-select:none;pointer-events:none}.rst-content div.highlight span.linenos{display:inline-block;padding-left:0;padding-right:12px;margin-right:12px;border-right:1px solid #e6e9ea}.rst-content .code-block-caption{font-style:italic;font-size:85%;line-height:1;padding:1em 0;text-align:center}@media print{.rst-content .codeblock,.rst-content div[class^=highlight],.rst-content div[class^=highlight] pre{white-space:pre-wrap}}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning{clear:both}.rst-content .admonition-todo .last,.rst-content .admonition-todo>:last-child,.rst-content .admonition .last,.rst-content .admonition>:last-child,.rst-content .attention .last,.rst-content .attention>:last-child,.rst-content .caution .last,.rst-content .caution>:last-child,.rst-content .danger .last,.rst-content .danger>:last-child,.rst-content .error .last,.rst-content .error>:last-child,.rst-content .hint .last,.rst-content .hint>:last-child,.rst-content .important .last,.rst-content .important>:last-child,.rst-content .note .last,.rst-content .note>:last-child,.rst-content .seealso .last,.rst-content .seealso>:last-child,.rst-content .tip .last,.rst-content .tip>:last-child,.rst-content .warning .last,.rst-content .warning>:last-child{margin-bottom:0}.rst-content .admonition-title:before{margin-right:4px}.rst-content .admonition table{border-color:rgba(0,0,0,.1)}.rst-content .admonition table td,.rst-content .admonition table th{background:transparent!important;border-color:rgba(0,0,0,.1)!important}.rst-content .section ol.loweralpha,.rst-content .section ol.loweralpha>li,.rst-content .toctree-wrapper ol.loweralpha,.rst-content .toctree-wrapper ol.loweralpha>li,.rst-content section ol.loweralpha,.rst-content section ol.loweralpha>li{list-style:lower-alpha}.rst-content .section ol.upperalpha,.rst-content .section ol.upperalpha>li,.rst-content .toctree-wrapper ol.upperalpha,.rst-content .toctree-wrapper ol.upperalpha>li,.rst-content section ol.upperalpha,.rst-content section ol.upperalpha>li{list-style:upper-alpha}.rst-content .section ol li>*,.rst-content .section ul li>*,.rst-content .toctree-wrapper ol li>*,.rst-content .toctree-wrapper ul li>*,.rst-content section ol li>*,.rst-content section ul li>*{margin-top:12px;margin-bottom:12px}.rst-content .section ol li>:first-child,.rst-content .section ul li>:first-child,.rst-content .toctree-wrapper ol li>:first-child,.rst-content .toctree-wrapper ul li>:first-child,.rst-content section ol li>:first-child,.rst-content section ul li>:first-child{margin-top:0}.rst-content .section ol li>p,.rst-content .section ol li>p:last-child,.rst-content .section ul li>p,.rst-content .section ul li>p:last-child,.rst-content .toctree-wrapper ol li>p,.rst-content .toctree-wrapper ol li>p:last-child,.rst-content .toctree-wrapper ul li>p,.rst-content .toctree-wrapper ul li>p:last-child,.rst-content section ol li>p,.rst-content section ol li>p:last-child,.rst-content section ul li>p,.rst-content section ul li>p:last-child{margin-bottom:12px}.rst-content .section ol li>p:only-child,.rst-content .section ol li>p:only-child:last-child,.rst-content .section ul li>p:only-child,.rst-content .section ul li>p:only-child:last-child,.rst-content .toctree-wrapper ol li>p:only-child,.rst-content .toctree-wrapper ol li>p:only-child:last-child,.rst-content .toctree-wrapper ul li>p:only-child,.rst-content .toctree-wrapper ul li>p:only-child:last-child,.rst-content section ol li>p:only-child,.rst-content section ol li>p:only-child:last-child,.rst-content section ul li>p:only-child,.rst-content section ul li>p:only-child:last-child{margin-bottom:0}.rst-content .section ol li>ol,.rst-content .section ol li>ul,.rst-content .section ul li>ol,.rst-content .section ul li>ul,.rst-content .toctree-wrapper ol li>ol,.rst-content .toctree-wrapper ol li>ul,.rst-content .toctree-wrapper ul li>ol,.rst-content .toctree-wrapper ul li>ul,.rst-content section ol li>ol,.rst-content section ol li>ul,.rst-content section ul li>ol,.rst-content section ul li>ul{margin-bottom:12px}.rst-content .section ol.simple li>*,.rst-content .section ol.simple li ol,.rst-content .section ol.simple li ul,.rst-content .section ul.simple li>*,.rst-content .section ul.simple li ol,.rst-content .section ul.simple li ul,.rst-content .toctree-wrapper ol.simple li>*,.rst-content .toctree-wrapper ol.simple li ol,.rst-content .toctree-wrapper ol.simple li ul,.rst-content .toctree-wrapper ul.simple li>*,.rst-content .toctree-wrapper ul.simple li ol,.rst-content .toctree-wrapper ul.simple li ul,.rst-content section ol.simple li>*,.rst-content section ol.simple li ol,.rst-content section ol.simple li ul,.rst-content section ul.simple li>*,.rst-content section ul.simple li ol,.rst-content section ul.simple li ul{margin-top:0;margin-bottom:0}.rst-content .line-block{margin-left:0;margin-bottom:24px;line-height:24px}.rst-content .line-block .line-block{margin-left:24px;margin-bottom:0}.rst-content .topic-title{font-weight:700;margin-bottom:12px}.rst-content .toc-backref{color:#404040}.rst-content .align-right{float:right;margin:0 0 24px 24px}.rst-content .align-left{float:left;margin:0 24px 24px 0}.rst-content .align-center{margin:auto}.rst-content .align-center:not(table){display:block}.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink{opacity:0;font-size:14px;font-family:FontAwesome;margin-left:.5em}.rst-content .code-block-caption .headerlink:focus,.rst-content .code-block-caption:hover .headerlink,.rst-content .eqno .headerlink:focus,.rst-content .eqno:hover .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink:focus,.rst-content .toctree-wrapper>p.caption:hover .headerlink,.rst-content dl dt .headerlink:focus,.rst-content dl dt:hover .headerlink,.rst-content h1 .headerlink:focus,.rst-content h1:hover .headerlink,.rst-content h2 .headerlink:focus,.rst-content h2:hover .headerlink,.rst-content h3 .headerlink:focus,.rst-content h3:hover .headerlink,.rst-content h4 .headerlink:focus,.rst-content h4:hover .headerlink,.rst-content h5 .headerlink:focus,.rst-content h5:hover .headerlink,.rst-content h6 .headerlink:focus,.rst-content h6:hover .headerlink,.rst-content p.caption .headerlink:focus,.rst-content p.caption:hover .headerlink,.rst-content p .headerlink:focus,.rst-content p:hover .headerlink,.rst-content table>caption .headerlink:focus,.rst-content table>caption:hover .headerlink{opacity:1}.rst-content p a{overflow-wrap:anywhere}.rst-content .wy-table td p,.rst-content .wy-table td ul,.rst-content .wy-table th p,.rst-content .wy-table th ul,.rst-content table.docutils td p,.rst-content table.docutils td ul,.rst-content table.docutils th p,.rst-content table.docutils th ul,.rst-content table.field-list td p,.rst-content table.field-list td ul,.rst-content table.field-list th p,.rst-content table.field-list th ul{font-size:inherit}.rst-content .btn:focus{outline:2px solid}.rst-content table>caption .headerlink:after{font-size:12px}.rst-content .centered{text-align:center}.rst-content .sidebar{float:right;width:40%;display:block;margin:0 0 24px 24px;padding:24px;background:#f3f6f6;border:1px solid #e1e4e5}.rst-content .sidebar dl,.rst-content .sidebar p,.rst-content .sidebar ul{font-size:90%}.rst-content .sidebar .last,.rst-content .sidebar>:last-child{margin-bottom:0}.rst-content .sidebar .sidebar-title{display:block;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif;font-weight:700;background:#e1e4e5;padding:6px 12px;margin:-24px -24px 24px;font-size:100%}.rst-content .highlighted{background:#f1c40f;box-shadow:0 0 0 2px #f1c40f;display:inline;font-weight:700}.rst-content .citation-reference,.rst-content .footnote-reference{vertical-align:baseline;position:relative;top:-.4em;line-height:0;font-size:90%}.rst-content .citation-reference>span.fn-bracket,.rst-content .footnote-reference>span.fn-bracket{display:none}.rst-content .hlist{width:100%}.rst-content dl dt span.classifier:before{content:" : "}.rst-content dl dt span.classifier-delimiter{display:none!important}html.writer-html4 .rst-content table.docutils.citation,html.writer-html4 .rst-content table.docutils.footnote{background:none;border:none}html.writer-html4 .rst-content table.docutils.citation td,html.writer-html4 .rst-content table.docutils.citation tr,html.writer-html4 .rst-content table.docutils.footnote td,html.writer-html4 .rst-content table.docutils.footnote tr{border:none;background-color:transparent!important;white-space:normal}html.writer-html4 .rst-content table.docutils.citation td.label,html.writer-html4 .rst-content table.docutils.footnote td.label{padding-left:0;padding-right:0;vertical-align:top}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.field-list,html.writer-html5 .rst-content dl.footnote{display:grid;grid-template-columns:auto minmax(80%,95%)}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dt{display:inline-grid;grid-template-columns:max-content auto}html.writer-html5 .rst-content aside.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content div.citation{display:grid;grid-template-columns:auto auto minmax(.65rem,auto) minmax(40%,95%)}html.writer-html5 .rst-content aside.citation>span.label,html.writer-html5 .rst-content aside.footnote>span.label,html.writer-html5 .rst-content div.citation>span.label{grid-column-start:1;grid-column-end:2}html.writer-html5 .rst-content aside.citation>span.backrefs,html.writer-html5 .rst-content aside.footnote>span.backrefs,html.writer-html5 .rst-content div.citation>span.backrefs{grid-column-start:2;grid-column-end:3;grid-row-start:1;grid-row-end:3}html.writer-html5 .rst-content aside.citation>p,html.writer-html5 .rst-content aside.footnote>p,html.writer-html5 .rst-content div.citation>p{grid-column-start:4;grid-column-end:5}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.field-list,html.writer-html5 .rst-content dl.footnote{margin-bottom:24px}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dt{padding-left:1rem}html.writer-html5 .rst-content dl.citation>dd,html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dd,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dd,html.writer-html5 .rst-content dl.footnote>dt{margin-bottom:0}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.footnote{font-size:.9rem}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.footnote>dt{margin:0 .5rem .5rem 0;line-height:1.2rem;word-break:break-all;font-weight:400}html.writer-html5 .rst-content dl.citation>dt>span.brackets:before,html.writer-html5 .rst-content dl.footnote>dt>span.brackets:before{content:"["}html.writer-html5 .rst-content dl.citation>dt>span.brackets:after,html.writer-html5 .rst-content dl.footnote>dt>span.brackets:after{content:"]"}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref{text-align:left;font-style:italic;margin-left:.65rem;word-break:break-word;word-spacing:-.1rem;max-width:5rem}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref>a,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref>a{word-break:keep-all}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref>a:not(:first-child):before,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref>a:not(:first-child):before{content:" "}html.writer-html5 .rst-content dl.citation>dd,html.writer-html5 .rst-content dl.footnote>dd{margin:0 0 .5rem;line-height:1.2rem}html.writer-html5 .rst-content dl.citation>dd p,html.writer-html5 .rst-content dl.footnote>dd p{font-size:.9rem}html.writer-html5 .rst-content aside.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content div.citation{padding-left:1rem;padding-right:1rem;font-size:.9rem;line-height:1.2rem}html.writer-html5 .rst-content aside.citation p,html.writer-html5 .rst-content aside.footnote p,html.writer-html5 .rst-content div.citation p{font-size:.9rem;line-height:1.2rem;margin-bottom:12px}html.writer-html5 .rst-content aside.citation span.backrefs,html.writer-html5 .rst-content aside.footnote span.backrefs,html.writer-html5 .rst-content div.citation span.backrefs{text-align:left;font-style:italic;margin-left:.65rem;word-break:break-word;word-spacing:-.1rem;max-width:5rem}html.writer-html5 .rst-content aside.citation span.backrefs>a,html.writer-html5 .rst-content aside.footnote span.backrefs>a,html.writer-html5 .rst-content div.citation span.backrefs>a{word-break:keep-all}html.writer-html5 .rst-content aside.citation span.backrefs>a:not(:first-child):before,html.writer-html5 .rst-content aside.footnote span.backrefs>a:not(:first-child):before,html.writer-html5 .rst-content div.citation span.backrefs>a:not(:first-child):before{content:" "}html.writer-html5 .rst-content aside.citation span.label,html.writer-html5 .rst-content aside.footnote span.label,html.writer-html5 .rst-content div.citation span.label{line-height:1.2rem}html.writer-html5 .rst-content aside.citation-list,html.writer-html5 .rst-content aside.footnote-list,html.writer-html5 .rst-content div.citation-list{margin-bottom:24px}html.writer-html5 .rst-content dl.option-list kbd{font-size:.9rem}.rst-content table.docutils.footnote,html.writer-html4 .rst-content table.docutils.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content aside.footnote-list aside.footnote,html.writer-html5 .rst-content div.citation-list>div.citation,html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.footnote{color:grey}.rst-content table.docutils.footnote code,.rst-content table.docutils.footnote tt,html.writer-html4 .rst-content table.docutils.citation code,html.writer-html4 .rst-content table.docutils.citation tt,html.writer-html5 .rst-content aside.footnote-list aside.footnote code,html.writer-html5 .rst-content aside.footnote-list aside.footnote tt,html.writer-html5 .rst-content aside.footnote code,html.writer-html5 .rst-content aside.footnote tt,html.writer-html5 .rst-content div.citation-list>div.citation code,html.writer-html5 .rst-content div.citation-list>div.citation tt,html.writer-html5 .rst-content dl.citation code,html.writer-html5 .rst-content dl.citation tt,html.writer-html5 .rst-content dl.footnote code,html.writer-html5 .rst-content dl.footnote tt{color:#555}.rst-content .wy-table-responsive.citation,.rst-content .wy-table-responsive.footnote{margin-bottom:0}.rst-content .wy-table-responsive.citation+:not(.citation),.rst-content .wy-table-responsive.footnote+:not(.footnote){margin-top:24px}.rst-content .wy-table-responsive.citation:last-child,.rst-content .wy-table-responsive.footnote:last-child{margin-bottom:24px}.rst-content table.docutils th{border-color:#e1e4e5}html.writer-html5 .rst-content table.docutils th{border:1px solid #e1e4e5}html.writer-html5 .rst-content table.docutils td>p,html.writer-html5 .rst-content table.docutils th>p{line-height:1rem;margin-bottom:0;font-size:.9rem}.rst-content table.docutils td .last,.rst-content table.docutils td .last>:last-child{margin-bottom:0}.rst-content table.field-list,.rst-content table.field-list td{border:none}.rst-content table.field-list td p{line-height:inherit}.rst-content table.field-list td>strong{display:inline-block}.rst-content table.field-list .field-name{padding-right:10px;text-align:left;white-space:nowrap}.rst-content table.field-list .field-body{text-align:left}.rst-content code,.rst-content tt{color:#000;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;padding:2px 5px}.rst-content code big,.rst-content code em,.rst-content tt big,.rst-content tt em{font-size:100%!important;line-height:normal}.rst-content code.literal,.rst-content tt.literal{color:#e74c3c;white-space:normal}.rst-content code.xref,.rst-content tt.xref,a .rst-content code,a .rst-content tt{font-weight:700;color:#404040;overflow-wrap:normal}.rst-content kbd,.rst-content pre,.rst-content samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace}.rst-content a code,.rst-content a tt{color:#2980b9}.rst-content dl{margin-bottom:24px}.rst-content dl dt{font-weight:700;margin-bottom:12px}.rst-content dl ol,.rst-content dl p,.rst-content dl table,.rst-content dl ul{margin-bottom:12px}.rst-content dl dd{margin:0 0 12px 24px;line-height:24px}.rst-content dl dd>ol:last-child,.rst-content dl dd>p:last-child,.rst-content dl dd>table:last-child,.rst-content dl dd>ul:last-child{margin-bottom:0}html.writer-html4 .rst-content dl:not(.docutils),html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple){margin-bottom:24px}html.writer-html4 .rst-content dl:not(.docutils)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt{display:table;margin:6px 0;font-size:90%;line-height:normal;background:#e7f2fa;color:#2980b9;border-top:3px solid #6ab0de;padding:6px;position:relative}html.writer-html4 .rst-content dl:not(.docutils)>dt:before,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt:before{color:#6ab0de}html.writer-html4 .rst-content dl:not(.docutils)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt{margin-bottom:6px;border:none;border-left:3px solid #ccc;background:#f0f0f0;color:#555}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils)>dt:first-child,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt:first-child{margin-top:0}html.writer-html4 .rst-content dl:not(.docutils) code.descclassname,html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descclassname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descname{background-color:transparent;border:none;padding:0;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descname{font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .optional,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .optional{display:inline-block;padding:0 4px;color:#000;font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .property,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .property{display:inline-block;padding-right:8px;max-width:100%}html.writer-html4 .rst-content dl:not(.docutils) .k,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .k{font-style:italic}html.writer-html4 .rst-content dl:not(.docutils) .descclassname,html.writer-html4 .rst-content dl:not(.docutils) .descname,html.writer-html4 .rst-content dl:not(.docutils) .sig-name,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .sig-name{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#000}.rst-content .viewcode-back,.rst-content .viewcode-link{display:inline-block;color:#27ae60;font-size:80%;padding-left:24px}.rst-content .viewcode-back{display:block;float:right}.rst-content p.rubric{margin-bottom:12px;font-weight:700}.rst-content code.download,.rst-content tt.download{background:inherit;padding:inherit;font-weight:400;font-family:inherit;font-size:inherit;color:inherit;border:inherit;white-space:inherit}.rst-content code.download span:first-child,.rst-content tt.download span:first-child{-webkit-font-smoothing:subpixel-antialiased}.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{margin-right:4px}.rst-content .guilabel,.rst-content .menuselection{font-size:80%;font-weight:700;border-radius:4px;padding:2.4px 6px;margin:auto 2px}.rst-content .guilabel,.rst-content .menuselection{border:1px solid #7fbbe3;background:#e7f2fa}.rst-content :not(dl.option-list)>:not(dt):not(kbd):not(.kbd)>.kbd,.rst-content :not(dl.option-list)>:not(dt):not(kbd):not(.kbd)>kbd{color:inherit;font-size:80%;background-color:#fff;border:1px solid #a6a6a6;border-radius:4px;box-shadow:0 2px grey;padding:2.4px 6px;margin:auto 0}.rst-content .versionmodified{font-style:italic}@media screen and (max-width:480px){.rst-content .sidebar{width:100%}}span[id*=MathJax-Span]{color:#404040}.math{text-align:center}@font-face{font-family:Lato;src:url(fonts/lato-normal.woff2?bd03a2cc277bbbc338d464e679fe9942) format("woff2"),url(fonts/lato-normal.woff?27bd77b9162d388cb8d4c4217c7c5e2a) format("woff");font-weight:400;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold.woff2?cccb897485813c7c256901dbca54ecf2) format("woff2"),url(fonts/lato-bold.woff?d878b6c29b10beca227e9eef4246111b) format("woff");font-weight:700;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold-italic.woff2?0b6bb6725576b072c5d0b02ecdd1900d) format("woff2"),url(fonts/lato-bold-italic.woff?9c7e4e9eb485b4a121c760e61bc3707c) format("woff");font-weight:700;font-style:italic;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-normal-italic.woff2?4eb103b4d12be57cb1d040ed5e162e9d) format("woff2"),url(fonts/lato-normal-italic.woff?f28f2d6482446544ef1ea1ccc6dd5892) format("woff");font-weight:400;font-style:italic;font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:400;src:url(fonts/Roboto-Slab-Regular.woff2?7abf5b8d04d26a2cafea937019bca958) format("woff2"),url(fonts/Roboto-Slab-Regular.woff?c1be9284088d487c5e3ff0a10a92e58c) format("woff");font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:700;src:url(fonts/Roboto-Slab-Bold.woff2?9984f4a9bda09be08e83f2506954adbe) format("woff2"),url(fonts/Roboto-Slab-Bold.woff?bed5564a116b05148e3b3bea6fb1162a) format("woff");font-display:block} \ No newline at end of file + */@font-face{font-family:FontAwesome;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713);src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix&v=4.7.0) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#fontawesomeregular) format("svg");font-weight:400;font-style:normal}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li button.toctree-expand{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14286em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14286em;width:2.14286em;top:.14286em;text-align:center}.fa-li.fa-lg{left:-1.85714em}.fa-border{padding:.2em .25em .15em;border:.08em solid #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa-pull-left.icon,.fa.fa-pull-left,.rst-content .code-block-caption .fa-pull-left.headerlink,.rst-content .eqno .fa-pull-left.headerlink,.rst-content .fa-pull-left.admonition-title,.rst-content code.download span.fa-pull-left:first-child,.rst-content dl dt .fa-pull-left.headerlink,.rst-content h1 .fa-pull-left.headerlink,.rst-content h2 .fa-pull-left.headerlink,.rst-content h3 .fa-pull-left.headerlink,.rst-content h4 .fa-pull-left.headerlink,.rst-content h5 .fa-pull-left.headerlink,.rst-content h6 .fa-pull-left.headerlink,.rst-content p .fa-pull-left.headerlink,.rst-content table>caption .fa-pull-left.headerlink,.rst-content tt.download span.fa-pull-left:first-child,.wy-menu-vertical li.current>a button.fa-pull-left.toctree-expand,.wy-menu-vertical li.on a button.fa-pull-left.toctree-expand,.wy-menu-vertical li button.fa-pull-left.toctree-expand{margin-right:.3em}.fa-pull-right.icon,.fa.fa-pull-right,.rst-content .code-block-caption .fa-pull-right.headerlink,.rst-content .eqno .fa-pull-right.headerlink,.rst-content .fa-pull-right.admonition-title,.rst-content code.download span.fa-pull-right:first-child,.rst-content dl dt .fa-pull-right.headerlink,.rst-content h1 .fa-pull-right.headerlink,.rst-content h2 .fa-pull-right.headerlink,.rst-content h3 .fa-pull-right.headerlink,.rst-content h4 .fa-pull-right.headerlink,.rst-content h5 .fa-pull-right.headerlink,.rst-content h6 .fa-pull-right.headerlink,.rst-content p .fa-pull-right.headerlink,.rst-content table>caption .fa-pull-right.headerlink,.rst-content tt.download span.fa-pull-right:first-child,.wy-menu-vertical li.current>a button.fa-pull-right.toctree-expand,.wy-menu-vertical li.on a button.fa-pull-right.toctree-expand,.wy-menu-vertical li button.fa-pull-right.toctree-expand{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left,.pull-left.icon,.rst-content .code-block-caption .pull-left.headerlink,.rst-content .eqno .pull-left.headerlink,.rst-content .pull-left.admonition-title,.rst-content code.download span.pull-left:first-child,.rst-content dl dt .pull-left.headerlink,.rst-content h1 .pull-left.headerlink,.rst-content h2 .pull-left.headerlink,.rst-content h3 .pull-left.headerlink,.rst-content h4 .pull-left.headerlink,.rst-content h5 .pull-left.headerlink,.rst-content h6 .pull-left.headerlink,.rst-content p .pull-left.headerlink,.rst-content table>caption .pull-left.headerlink,.rst-content tt.download span.pull-left:first-child,.wy-menu-vertical li.current>a button.pull-left.toctree-expand,.wy-menu-vertical li.on a button.pull-left.toctree-expand,.wy-menu-vertical li button.pull-left.toctree-expand{margin-right:.3em}.fa.pull-right,.pull-right.icon,.rst-content .code-block-caption .pull-right.headerlink,.rst-content .eqno .pull-right.headerlink,.rst-content .pull-right.admonition-title,.rst-content code.download span.pull-right:first-child,.rst-content dl dt .pull-right.headerlink,.rst-content h1 .pull-right.headerlink,.rst-content h2 .pull-right.headerlink,.rst-content h3 .pull-right.headerlink,.rst-content h4 .pull-right.headerlink,.rst-content h5 .pull-right.headerlink,.rst-content h6 .pull-right.headerlink,.rst-content p .pull-right.headerlink,.rst-content table>caption .pull-right.headerlink,.rst-content tt.download span.pull-right:first-child,.wy-menu-vertical li.current>a button.pull-right.toctree-expand,.wy-menu-vertical li.on a button.pull-right.toctree-expand,.wy-menu-vertical li button.pull-right.toctree-expand{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s linear infinite;animation:fa-spin 2s linear infinite}.fa-pulse{-webkit-animation:fa-spin 1s steps(8) infinite;animation:fa-spin 1s steps(8) infinite}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scaleX(-1);-ms-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scaleY(-1);-ms-transform:scaleY(-1);transform:scaleY(-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:""}.fa-music:before{content:""}.fa-search:before,.icon-search:before{content:""}.fa-envelope-o:before{content:""}.fa-heart:before{content:""}.fa-star:before{content:""}.fa-star-o:before{content:""}.fa-user:before{content:""}.fa-film:before{content:""}.fa-th-large:before{content:""}.fa-th:before{content:""}.fa-th-list:before{content:""}.fa-check:before{content:""}.fa-close:before,.fa-remove:before,.fa-times:before{content:""}.fa-search-plus:before{content:""}.fa-search-minus:before{content:""}.fa-power-off:before{content:""}.fa-signal:before{content:""}.fa-cog:before,.fa-gear:before{content:""}.fa-trash-o:before{content:""}.fa-home:before,.icon-home:before{content:""}.fa-file-o:before{content:""}.fa-clock-o:before{content:""}.fa-road:before{content:""}.fa-download:before,.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{content:""}.fa-arrow-circle-o-down:before{content:""}.fa-arrow-circle-o-up:before{content:""}.fa-inbox:before{content:""}.fa-play-circle-o:before{content:""}.fa-repeat:before,.fa-rotate-right:before{content:""}.fa-refresh:before{content:""}.fa-list-alt:before{content:""}.fa-lock:before{content:""}.fa-flag:before{content:""}.fa-headphones:before{content:""}.fa-volume-off:before{content:""}.fa-volume-down:before{content:""}.fa-volume-up:before{content:""}.fa-qrcode:before{content:""}.fa-barcode:before{content:""}.fa-tag:before{content:""}.fa-tags:before{content:""}.fa-book:before,.icon-book:before{content:""}.fa-bookmark:before{content:""}.fa-print:before{content:""}.fa-camera:before{content:""}.fa-font:before{content:""}.fa-bold:before{content:""}.fa-italic:before{content:""}.fa-text-height:before{content:""}.fa-text-width:before{content:""}.fa-align-left:before{content:""}.fa-align-center:before{content:""}.fa-align-right:before{content:""}.fa-align-justify:before{content:""}.fa-list:before{content:""}.fa-dedent:before,.fa-outdent:before{content:""}.fa-indent:before{content:""}.fa-video-camera:before{content:""}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:""}.fa-pencil:before{content:""}.fa-map-marker:before{content:""}.fa-adjust:before{content:""}.fa-tint:before{content:""}.fa-edit:before,.fa-pencil-square-o:before{content:""}.fa-share-square-o:before{content:""}.fa-check-square-o:before{content:""}.fa-arrows:before{content:""}.fa-step-backward:before{content:""}.fa-fast-backward:before{content:""}.fa-backward:before{content:""}.fa-play:before{content:""}.fa-pause:before{content:""}.fa-stop:before{content:""}.fa-forward:before{content:""}.fa-fast-forward:before{content:""}.fa-step-forward:before{content:""}.fa-eject:before{content:""}.fa-chevron-left:before{content:""}.fa-chevron-right:before{content:""}.fa-plus-circle:before{content:""}.fa-minus-circle:before{content:""}.fa-times-circle:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before{content:""}.fa-check-circle:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before{content:""}.fa-question-circle:before{content:""}.fa-info-circle:before{content:""}.fa-crosshairs:before{content:""}.fa-times-circle-o:before{content:""}.fa-check-circle-o:before{content:""}.fa-ban:before{content:""}.fa-arrow-left:before{content:""}.fa-arrow-right:before{content:""}.fa-arrow-up:before{content:""}.fa-arrow-down:before{content:""}.fa-mail-forward:before,.fa-share:before{content:""}.fa-expand:before{content:""}.fa-compress:before{content:""}.fa-plus:before{content:""}.fa-minus:before{content:""}.fa-asterisk:before{content:""}.fa-exclamation-circle:before,.rst-content .admonition-title:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before{content:""}.fa-gift:before{content:""}.fa-leaf:before{content:""}.fa-fire:before,.icon-fire:before{content:""}.fa-eye:before{content:""}.fa-eye-slash:before{content:""}.fa-exclamation-triangle:before,.fa-warning:before{content:""}.fa-plane:before{content:""}.fa-calendar:before{content:""}.fa-random:before{content:""}.fa-comment:before{content:""}.fa-magnet:before{content:""}.fa-chevron-up:before{content:""}.fa-chevron-down:before{content:""}.fa-retweet:before{content:""}.fa-shopping-cart:before{content:""}.fa-folder:before{content:""}.fa-folder-open:before{content:""}.fa-arrows-v:before{content:""}.fa-arrows-h:before{content:""}.fa-bar-chart-o:before,.fa-bar-chart:before{content:""}.fa-twitter-square:before{content:""}.fa-facebook-square:before{content:""}.fa-camera-retro:before{content:""}.fa-key:before{content:""}.fa-cogs:before,.fa-gears:before{content:""}.fa-comments:before{content:""}.fa-thumbs-o-up:before{content:""}.fa-thumbs-o-down:before{content:""}.fa-star-half:before{content:""}.fa-heart-o:before{content:""}.fa-sign-out:before{content:""}.fa-linkedin-square:before{content:""}.fa-thumb-tack:before{content:""}.fa-external-link:before{content:""}.fa-sign-in:before{content:""}.fa-trophy:before{content:""}.fa-github-square:before{content:""}.fa-upload:before{content:""}.fa-lemon-o:before{content:""}.fa-phone:before{content:""}.fa-square-o:before{content:""}.fa-bookmark-o:before{content:""}.fa-phone-square:before{content:""}.fa-twitter:before{content:""}.fa-facebook-f:before,.fa-facebook:before{content:""}.fa-github:before,.icon-github:before{content:""}.fa-unlock:before{content:""}.fa-credit-card:before{content:""}.fa-feed:before,.fa-rss:before{content:""}.fa-hdd-o:before{content:""}.fa-bullhorn:before{content:""}.fa-bell:before{content:""}.fa-certificate:before{content:""}.fa-hand-o-right:before{content:""}.fa-hand-o-left:before{content:""}.fa-hand-o-up:before{content:""}.fa-hand-o-down:before{content:""}.fa-arrow-circle-left:before,.icon-circle-arrow-left:before{content:""}.fa-arrow-circle-right:before,.icon-circle-arrow-right:before{content:""}.fa-arrow-circle-up:before{content:""}.fa-arrow-circle-down:before{content:""}.fa-globe:before{content:""}.fa-wrench:before{content:""}.fa-tasks:before{content:""}.fa-filter:before{content:""}.fa-briefcase:before{content:""}.fa-arrows-alt:before{content:""}.fa-group:before,.fa-users:before{content:""}.fa-chain:before,.fa-link:before,.icon-link:before{content:""}.fa-cloud:before{content:""}.fa-flask:before{content:""}.fa-cut:before,.fa-scissors:before{content:""}.fa-copy:before,.fa-files-o:before{content:""}.fa-paperclip:before{content:""}.fa-floppy-o:before,.fa-save:before{content:""}.fa-square:before{content:""}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:""}.fa-list-ul:before{content:""}.fa-list-ol:before{content:""}.fa-strikethrough:before{content:""}.fa-underline:before{content:""}.fa-table:before{content:""}.fa-magic:before{content:""}.fa-truck:before{content:""}.fa-pinterest:before{content:""}.fa-pinterest-square:before{content:""}.fa-google-plus-square:before{content:""}.fa-google-plus:before{content:""}.fa-money:before{content:""}.fa-caret-down:before,.icon-caret-down:before,.wy-dropdown .caret:before{content:""}.fa-caret-up:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-columns:before{content:""}.fa-sort:before,.fa-unsorted:before{content:""}.fa-sort-desc:before,.fa-sort-down:before{content:""}.fa-sort-asc:before,.fa-sort-up:before{content:""}.fa-envelope:before{content:""}.fa-linkedin:before{content:""}.fa-rotate-left:before,.fa-undo:before{content:""}.fa-gavel:before,.fa-legal:before{content:""}.fa-dashboard:before,.fa-tachometer:before{content:""}.fa-comment-o:before{content:""}.fa-comments-o:before{content:""}.fa-bolt:before,.fa-flash:before{content:""}.fa-sitemap:before{content:""}.fa-umbrella:before{content:""}.fa-clipboard:before,.fa-paste:before{content:""}.fa-lightbulb-o:before{content:""}.fa-exchange:before{content:""}.fa-cloud-download:before{content:""}.fa-cloud-upload:before{content:""}.fa-user-md:before{content:""}.fa-stethoscope:before{content:""}.fa-suitcase:before{content:""}.fa-bell-o:before{content:""}.fa-coffee:before{content:""}.fa-cutlery:before{content:""}.fa-file-text-o:before{content:""}.fa-building-o:before{content:""}.fa-hospital-o:before{content:""}.fa-ambulance:before{content:""}.fa-medkit:before{content:""}.fa-fighter-jet:before{content:""}.fa-beer:before{content:""}.fa-h-square:before{content:""}.fa-plus-square:before{content:""}.fa-angle-double-left:before{content:""}.fa-angle-double-right:before{content:""}.fa-angle-double-up:before{content:""}.fa-angle-double-down:before{content:""}.fa-angle-left:before{content:""}.fa-angle-right:before{content:""}.fa-angle-up:before{content:""}.fa-angle-down:before{content:""}.fa-desktop:before{content:""}.fa-laptop:before{content:""}.fa-tablet:before{content:""}.fa-mobile-phone:before,.fa-mobile:before{content:""}.fa-circle-o:before{content:""}.fa-quote-left:before{content:""}.fa-quote-right:before{content:""}.fa-spinner:before{content:""}.fa-circle:before{content:""}.fa-mail-reply:before,.fa-reply:before{content:""}.fa-github-alt:before{content:""}.fa-folder-o:before{content:""}.fa-folder-open-o:before{content:""}.fa-smile-o:before{content:""}.fa-frown-o:before{content:""}.fa-meh-o:before{content:""}.fa-gamepad:before{content:""}.fa-keyboard-o:before{content:""}.fa-flag-o:before{content:""}.fa-flag-checkered:before{content:""}.fa-terminal:before{content:""}.fa-code:before{content:""}.fa-mail-reply-all:before,.fa-reply-all:before{content:""}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:""}.fa-location-arrow:before{content:""}.fa-crop:before{content:""}.fa-code-fork:before{content:""}.fa-chain-broken:before,.fa-unlink:before{content:""}.fa-question:before{content:""}.fa-info:before{content:""}.fa-exclamation:before{content:""}.fa-superscript:before{content:""}.fa-subscript:before{content:""}.fa-eraser:before{content:""}.fa-puzzle-piece:before{content:""}.fa-microphone:before{content:""}.fa-microphone-slash:before{content:""}.fa-shield:before{content:""}.fa-calendar-o:before{content:""}.fa-fire-extinguisher:before{content:""}.fa-rocket:before{content:""}.fa-maxcdn:before{content:""}.fa-chevron-circle-left:before{content:""}.fa-chevron-circle-right:before{content:""}.fa-chevron-circle-up:before{content:""}.fa-chevron-circle-down:before{content:""}.fa-html5:before{content:""}.fa-css3:before{content:""}.fa-anchor:before{content:""}.fa-unlock-alt:before{content:""}.fa-bullseye:before{content:""}.fa-ellipsis-h:before{content:""}.fa-ellipsis-v:before{content:""}.fa-rss-square:before{content:""}.fa-play-circle:before{content:""}.fa-ticket:before{content:""}.fa-minus-square:before{content:""}.fa-minus-square-o:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before{content:""}.fa-level-up:before{content:""}.fa-level-down:before{content:""}.fa-check-square:before{content:""}.fa-pencil-square:before{content:""}.fa-external-link-square:before{content:""}.fa-share-square:before{content:""}.fa-compass:before{content:""}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:""}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:""}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:""}.fa-eur:before,.fa-euro:before{content:""}.fa-gbp:before{content:""}.fa-dollar:before,.fa-usd:before{content:""}.fa-inr:before,.fa-rupee:before{content:""}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:""}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:""}.fa-krw:before,.fa-won:before{content:""}.fa-bitcoin:before,.fa-btc:before{content:""}.fa-file:before{content:""}.fa-file-text:before{content:""}.fa-sort-alpha-asc:before{content:""}.fa-sort-alpha-desc:before{content:""}.fa-sort-amount-asc:before{content:""}.fa-sort-amount-desc:before{content:""}.fa-sort-numeric-asc:before{content:""}.fa-sort-numeric-desc:before{content:""}.fa-thumbs-up:before{content:""}.fa-thumbs-down:before{content:""}.fa-youtube-square:before{content:""}.fa-youtube:before{content:""}.fa-xing:before{content:""}.fa-xing-square:before{content:""}.fa-youtube-play:before{content:""}.fa-dropbox:before{content:""}.fa-stack-overflow:before{content:""}.fa-instagram:before{content:""}.fa-flickr:before{content:""}.fa-adn:before{content:""}.fa-bitbucket:before,.icon-bitbucket:before{content:""}.fa-bitbucket-square:before{content:""}.fa-tumblr:before{content:""}.fa-tumblr-square:before{content:""}.fa-long-arrow-down:before{content:""}.fa-long-arrow-up:before{content:""}.fa-long-arrow-left:before{content:""}.fa-long-arrow-right:before{content:""}.fa-apple:before{content:""}.fa-windows:before{content:""}.fa-android:before{content:""}.fa-linux:before{content:""}.fa-dribbble:before{content:""}.fa-skype:before{content:""}.fa-foursquare:before{content:""}.fa-trello:before{content:""}.fa-female:before{content:""}.fa-male:before{content:""}.fa-gittip:before,.fa-gratipay:before{content:""}.fa-sun-o:before{content:""}.fa-moon-o:before{content:""}.fa-archive:before{content:""}.fa-bug:before{content:""}.fa-vk:before{content:""}.fa-weibo:before{content:""}.fa-renren:before{content:""}.fa-pagelines:before{content:""}.fa-stack-exchange:before{content:""}.fa-arrow-circle-o-right:before{content:""}.fa-arrow-circle-o-left:before{content:""}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:""}.fa-dot-circle-o:before{content:""}.fa-wheelchair:before{content:""}.fa-vimeo-square:before{content:""}.fa-try:before,.fa-turkish-lira:before{content:""}.fa-plus-square-o:before,.wy-menu-vertical li button.toctree-expand:before{content:""}.fa-space-shuttle:before{content:""}.fa-slack:before{content:""}.fa-envelope-square:before{content:""}.fa-wordpress:before{content:""}.fa-openid:before{content:""}.fa-bank:before,.fa-institution:before,.fa-university:before{content:""}.fa-graduation-cap:before,.fa-mortar-board:before{content:""}.fa-yahoo:before{content:""}.fa-google:before{content:""}.fa-reddit:before{content:""}.fa-reddit-square:before{content:""}.fa-stumbleupon-circle:before{content:""}.fa-stumbleupon:before{content:""}.fa-delicious:before{content:""}.fa-digg:before{content:""}.fa-pied-piper-pp:before{content:""}.fa-pied-piper-alt:before{content:""}.fa-drupal:before{content:""}.fa-joomla:before{content:""}.fa-language:before{content:""}.fa-fax:before{content:""}.fa-building:before{content:""}.fa-child:before{content:""}.fa-paw:before{content:""}.fa-spoon:before{content:""}.fa-cube:before{content:""}.fa-cubes:before{content:""}.fa-behance:before{content:""}.fa-behance-square:before{content:""}.fa-steam:before{content:""}.fa-steam-square:before{content:""}.fa-recycle:before{content:""}.fa-automobile:before,.fa-car:before{content:""}.fa-cab:before,.fa-taxi:before{content:""}.fa-tree:before{content:""}.fa-spotify:before{content:""}.fa-deviantart:before{content:""}.fa-soundcloud:before{content:""}.fa-database:before{content:""}.fa-file-pdf-o:before{content:""}.fa-file-word-o:before{content:""}.fa-file-excel-o:before{content:""}.fa-file-powerpoint-o:before{content:""}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:""}.fa-file-archive-o:before,.fa-file-zip-o:before{content:""}.fa-file-audio-o:before,.fa-file-sound-o:before{content:""}.fa-file-movie-o:before,.fa-file-video-o:before{content:""}.fa-file-code-o:before{content:""}.fa-vine:before{content:""}.fa-codepen:before{content:""}.fa-jsfiddle:before{content:""}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:""}.fa-circle-o-notch:before{content:""}.fa-ra:before,.fa-rebel:before,.fa-resistance:before{content:""}.fa-empire:before,.fa-ge:before{content:""}.fa-git-square:before{content:""}.fa-git:before{content:""}.fa-hacker-news:before,.fa-y-combinator-square:before,.fa-yc-square:before{content:""}.fa-tencent-weibo:before{content:""}.fa-qq:before{content:""}.fa-wechat:before,.fa-weixin:before{content:""}.fa-paper-plane:before,.fa-send:before{content:""}.fa-paper-plane-o:before,.fa-send-o:before{content:""}.fa-history:before{content:""}.fa-circle-thin:before{content:""}.fa-header:before{content:""}.fa-paragraph:before{content:""}.fa-sliders:before{content:""}.fa-share-alt:before{content:""}.fa-share-alt-square:before{content:""}.fa-bomb:before{content:""}.fa-futbol-o:before,.fa-soccer-ball-o:before{content:""}.fa-tty:before{content:""}.fa-binoculars:before{content:""}.fa-plug:before{content:""}.fa-slideshare:before{content:""}.fa-twitch:before{content:""}.fa-yelp:before{content:""}.fa-newspaper-o:before{content:""}.fa-wifi:before{content:""}.fa-calculator:before{content:""}.fa-paypal:before{content:""}.fa-google-wallet:before{content:""}.fa-cc-visa:before{content:""}.fa-cc-mastercard:before{content:""}.fa-cc-discover:before{content:""}.fa-cc-amex:before{content:""}.fa-cc-paypal:before{content:""}.fa-cc-stripe:before{content:""}.fa-bell-slash:before{content:""}.fa-bell-slash-o:before{content:""}.fa-trash:before{content:""}.fa-copyright:before{content:""}.fa-at:before{content:""}.fa-eyedropper:before{content:""}.fa-paint-brush:before{content:""}.fa-birthday-cake:before{content:""}.fa-area-chart:before{content:""}.fa-pie-chart:before{content:""}.fa-line-chart:before{content:""}.fa-lastfm:before{content:""}.fa-lastfm-square:before{content:""}.fa-toggle-off:before{content:""}.fa-toggle-on:before{content:""}.fa-bicycle:before{content:""}.fa-bus:before{content:""}.fa-ioxhost:before{content:""}.fa-angellist:before{content:""}.fa-cc:before{content:""}.fa-ils:before,.fa-shekel:before,.fa-sheqel:before{content:""}.fa-meanpath:before{content:""}.fa-buysellads:before{content:""}.fa-connectdevelop:before{content:""}.fa-dashcube:before{content:""}.fa-forumbee:before{content:""}.fa-leanpub:before{content:""}.fa-sellsy:before{content:""}.fa-shirtsinbulk:before{content:""}.fa-simplybuilt:before{content:""}.fa-skyatlas:before{content:""}.fa-cart-plus:before{content:""}.fa-cart-arrow-down:before{content:""}.fa-diamond:before{content:""}.fa-ship:before{content:""}.fa-user-secret:before{content:""}.fa-motorcycle:before{content:""}.fa-street-view:before{content:""}.fa-heartbeat:before{content:""}.fa-venus:before{content:""}.fa-mars:before{content:""}.fa-mercury:before{content:""}.fa-intersex:before,.fa-transgender:before{content:""}.fa-transgender-alt:before{content:""}.fa-venus-double:before{content:""}.fa-mars-double:before{content:""}.fa-venus-mars:before{content:""}.fa-mars-stroke:before{content:""}.fa-mars-stroke-v:before{content:""}.fa-mars-stroke-h:before{content:""}.fa-neuter:before{content:""}.fa-genderless:before{content:""}.fa-facebook-official:before{content:""}.fa-pinterest-p:before{content:""}.fa-whatsapp:before{content:""}.fa-server:before{content:""}.fa-user-plus:before{content:""}.fa-user-times:before{content:""}.fa-bed:before,.fa-hotel:before{content:""}.fa-viacoin:before{content:""}.fa-train:before{content:""}.fa-subway:before{content:""}.fa-medium:before{content:""}.fa-y-combinator:before,.fa-yc:before{content:""}.fa-optin-monster:before{content:""}.fa-opencart:before{content:""}.fa-expeditedssl:before{content:""}.fa-battery-4:before,.fa-battery-full:before,.fa-battery:before{content:""}.fa-battery-3:before,.fa-battery-three-quarters:before{content:""}.fa-battery-2:before,.fa-battery-half:before{content:""}.fa-battery-1:before,.fa-battery-quarter:before{content:""}.fa-battery-0:before,.fa-battery-empty:before{content:""}.fa-mouse-pointer:before{content:""}.fa-i-cursor:before{content:""}.fa-object-group:before{content:""}.fa-object-ungroup:before{content:""}.fa-sticky-note:before{content:""}.fa-sticky-note-o:before{content:""}.fa-cc-jcb:before{content:""}.fa-cc-diners-club:before{content:""}.fa-clone:before{content:""}.fa-balance-scale:before{content:""}.fa-hourglass-o:before{content:""}.fa-hourglass-1:before,.fa-hourglass-start:before{content:""}.fa-hourglass-2:before,.fa-hourglass-half:before{content:""}.fa-hourglass-3:before,.fa-hourglass-end:before{content:""}.fa-hourglass:before{content:""}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:""}.fa-hand-paper-o:before,.fa-hand-stop-o:before{content:""}.fa-hand-scissors-o:before{content:""}.fa-hand-lizard-o:before{content:""}.fa-hand-spock-o:before{content:""}.fa-hand-pointer-o:before{content:""}.fa-hand-peace-o:before{content:""}.fa-trademark:before{content:""}.fa-registered:before{content:""}.fa-creative-commons:before{content:""}.fa-gg:before{content:""}.fa-gg-circle:before{content:""}.fa-tripadvisor:before{content:""}.fa-odnoklassniki:before{content:""}.fa-odnoklassniki-square:before{content:""}.fa-get-pocket:before{content:""}.fa-wikipedia-w:before{content:""}.fa-safari:before{content:""}.fa-chrome:before{content:""}.fa-firefox:before{content:""}.fa-opera:before{content:""}.fa-internet-explorer:before{content:""}.fa-television:before,.fa-tv:before{content:""}.fa-contao:before{content:""}.fa-500px:before{content:""}.fa-amazon:before{content:""}.fa-calendar-plus-o:before{content:""}.fa-calendar-minus-o:before{content:""}.fa-calendar-times-o:before{content:""}.fa-calendar-check-o:before{content:""}.fa-industry:before{content:""}.fa-map-pin:before{content:""}.fa-map-signs:before{content:""}.fa-map-o:before{content:""}.fa-map:before{content:""}.fa-commenting:before{content:""}.fa-commenting-o:before{content:""}.fa-houzz:before{content:""}.fa-vimeo:before{content:""}.fa-black-tie:before{content:""}.fa-fonticons:before{content:""}.fa-reddit-alien:before{content:""}.fa-edge:before{content:""}.fa-credit-card-alt:before{content:""}.fa-codiepie:before{content:""}.fa-modx:before{content:""}.fa-fort-awesome:before{content:""}.fa-usb:before{content:""}.fa-product-hunt:before{content:""}.fa-mixcloud:before{content:""}.fa-scribd:before{content:""}.fa-pause-circle:before{content:""}.fa-pause-circle-o:before{content:""}.fa-stop-circle:before{content:""}.fa-stop-circle-o:before{content:""}.fa-shopping-bag:before{content:""}.fa-shopping-basket:before{content:""}.fa-hashtag:before{content:""}.fa-bluetooth:before{content:""}.fa-bluetooth-b:before{content:""}.fa-percent:before{content:""}.fa-gitlab:before,.icon-gitlab:before{content:""}.fa-wpbeginner:before{content:""}.fa-wpforms:before{content:""}.fa-envira:before{content:""}.fa-universal-access:before{content:""}.fa-wheelchair-alt:before{content:""}.fa-question-circle-o:before{content:""}.fa-blind:before{content:""}.fa-audio-description:before{content:""}.fa-volume-control-phone:before{content:""}.fa-braille:before{content:""}.fa-assistive-listening-systems:before{content:""}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before{content:""}.fa-deaf:before,.fa-deafness:before,.fa-hard-of-hearing:before{content:""}.fa-glide:before{content:""}.fa-glide-g:before{content:""}.fa-sign-language:before,.fa-signing:before{content:""}.fa-low-vision:before{content:""}.fa-viadeo:before{content:""}.fa-viadeo-square:before{content:""}.fa-snapchat:before{content:""}.fa-snapchat-ghost:before{content:""}.fa-snapchat-square:before{content:""}.fa-pied-piper:before{content:""}.fa-first-order:before{content:""}.fa-yoast:before{content:""}.fa-themeisle:before{content:""}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:""}.fa-fa:before,.fa-font-awesome:before{content:""}.fa-handshake-o:before{content:""}.fa-envelope-open:before{content:""}.fa-envelope-open-o:before{content:""}.fa-linode:before{content:""}.fa-address-book:before{content:""}.fa-address-book-o:before{content:""}.fa-address-card:before,.fa-vcard:before{content:""}.fa-address-card-o:before,.fa-vcard-o:before{content:""}.fa-user-circle:before{content:""}.fa-user-circle-o:before{content:""}.fa-user-o:before{content:""}.fa-id-badge:before{content:""}.fa-drivers-license:before,.fa-id-card:before{content:""}.fa-drivers-license-o:before,.fa-id-card-o:before{content:""}.fa-quora:before{content:""}.fa-free-code-camp:before{content:""}.fa-telegram:before{content:""}.fa-thermometer-4:before,.fa-thermometer-full:before,.fa-thermometer:before{content:""}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:""}.fa-thermometer-2:before,.fa-thermometer-half:before{content:""}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:""}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:""}.fa-shower:before{content:""}.fa-bath:before,.fa-bathtub:before,.fa-s15:before{content:""}.fa-podcast:before{content:""}.fa-window-maximize:before{content:""}.fa-window-minimize:before{content:""}.fa-window-restore:before{content:""}.fa-times-rectangle:before,.fa-window-close:before{content:""}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:""}.fa-bandcamp:before{content:""}.fa-grav:before{content:""}.fa-etsy:before{content:""}.fa-imdb:before{content:""}.fa-ravelry:before{content:""}.fa-eercast:before{content:""}.fa-microchip:before{content:""}.fa-snowflake-o:before{content:""}.fa-superpowers:before{content:""}.fa-wpexplorer:before{content:""}.fa-meetup:before{content:""}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-dropdown .caret,.wy-inline-validate.wy-inline-validate-danger .wy-input-context,.wy-inline-validate.wy-inline-validate-info .wy-input-context,.wy-inline-validate.wy-inline-validate-success .wy-input-context,.wy-inline-validate.wy-inline-validate-warning .wy-input-context,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li button.toctree-expand{font-family:inherit}.fa:before,.icon:before,.rst-content .admonition-title:before,.rst-content .code-block-caption .headerlink:before,.rst-content .eqno .headerlink:before,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content p .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before,.wy-menu-vertical li button.toctree-expand:before{font-family:FontAwesome;display:inline-block;font-style:normal;font-weight:400;line-height:1;text-decoration:inherit}.rst-content .code-block-caption a .headerlink,.rst-content .eqno a .headerlink,.rst-content a .admonition-title,.rst-content code.download a span:first-child,.rst-content dl dt a .headerlink,.rst-content h1 a .headerlink,.rst-content h2 a .headerlink,.rst-content h3 a .headerlink,.rst-content h4 a .headerlink,.rst-content h5 a .headerlink,.rst-content h6 a .headerlink,.rst-content p.caption a .headerlink,.rst-content p a .headerlink,.rst-content table>caption a .headerlink,.rst-content tt.download a span:first-child,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li a button.toctree-expand,a .fa,a .icon,a .rst-content .admonition-title,a .rst-content .code-block-caption .headerlink,a .rst-content .eqno .headerlink,a .rst-content code.download span:first-child,a .rst-content dl dt .headerlink,a .rst-content h1 .headerlink,a .rst-content h2 .headerlink,a .rst-content h3 .headerlink,a .rst-content h4 .headerlink,a .rst-content h5 .headerlink,a .rst-content h6 .headerlink,a .rst-content p.caption .headerlink,a .rst-content p .headerlink,a .rst-content table>caption .headerlink,a .rst-content tt.download span:first-child,a .wy-menu-vertical li button.toctree-expand{display:inline-block;text-decoration:inherit}.btn .fa,.btn .icon,.btn .rst-content .admonition-title,.btn .rst-content .code-block-caption .headerlink,.btn .rst-content .eqno .headerlink,.btn .rst-content code.download span:first-child,.btn .rst-content dl dt .headerlink,.btn .rst-content h1 .headerlink,.btn .rst-content h2 .headerlink,.btn .rst-content h3 .headerlink,.btn .rst-content h4 .headerlink,.btn .rst-content h5 .headerlink,.btn .rst-content h6 .headerlink,.btn .rst-content p .headerlink,.btn .rst-content table>caption .headerlink,.btn .rst-content tt.download span:first-child,.btn .wy-menu-vertical li.current>a button.toctree-expand,.btn .wy-menu-vertical li.on a button.toctree-expand,.btn .wy-menu-vertical li button.toctree-expand,.nav .fa,.nav .icon,.nav .rst-content .admonition-title,.nav .rst-content .code-block-caption .headerlink,.nav .rst-content .eqno .headerlink,.nav .rst-content code.download span:first-child,.nav .rst-content dl dt .headerlink,.nav .rst-content h1 .headerlink,.nav .rst-content h2 .headerlink,.nav .rst-content h3 .headerlink,.nav .rst-content h4 .headerlink,.nav .rst-content h5 .headerlink,.nav .rst-content h6 .headerlink,.nav .rst-content p .headerlink,.nav .rst-content table>caption .headerlink,.nav .rst-content tt.download span:first-child,.nav .wy-menu-vertical li.current>a button.toctree-expand,.nav .wy-menu-vertical li.on a button.toctree-expand,.nav .wy-menu-vertical li button.toctree-expand,.rst-content .btn .admonition-title,.rst-content .code-block-caption .btn .headerlink,.rst-content .code-block-caption .nav .headerlink,.rst-content .eqno .btn .headerlink,.rst-content .eqno .nav .headerlink,.rst-content .nav .admonition-title,.rst-content code.download .btn span:first-child,.rst-content code.download .nav span:first-child,.rst-content dl dt .btn .headerlink,.rst-content dl dt .nav .headerlink,.rst-content h1 .btn .headerlink,.rst-content h1 .nav .headerlink,.rst-content h2 .btn .headerlink,.rst-content h2 .nav .headerlink,.rst-content h3 .btn .headerlink,.rst-content h3 .nav .headerlink,.rst-content h4 .btn .headerlink,.rst-content h4 .nav .headerlink,.rst-content h5 .btn .headerlink,.rst-content h5 .nav .headerlink,.rst-content h6 .btn .headerlink,.rst-content h6 .nav .headerlink,.rst-content p .btn .headerlink,.rst-content p .nav .headerlink,.rst-content table>caption .btn .headerlink,.rst-content table>caption .nav .headerlink,.rst-content tt.download .btn span:first-child,.rst-content tt.download .nav span:first-child,.wy-menu-vertical li .btn button.toctree-expand,.wy-menu-vertical li.current>a .btn button.toctree-expand,.wy-menu-vertical li.current>a .nav button.toctree-expand,.wy-menu-vertical li .nav button.toctree-expand,.wy-menu-vertical li.on a .btn button.toctree-expand,.wy-menu-vertical li.on a .nav button.toctree-expand{display:inline}.btn .fa-large.icon,.btn .fa.fa-large,.btn .rst-content .code-block-caption .fa-large.headerlink,.btn .rst-content .eqno .fa-large.headerlink,.btn .rst-content .fa-large.admonition-title,.btn .rst-content code.download span.fa-large:first-child,.btn .rst-content dl dt .fa-large.headerlink,.btn .rst-content h1 .fa-large.headerlink,.btn .rst-content h2 .fa-large.headerlink,.btn .rst-content h3 .fa-large.headerlink,.btn .rst-content h4 .fa-large.headerlink,.btn .rst-content h5 .fa-large.headerlink,.btn .rst-content h6 .fa-large.headerlink,.btn .rst-content p .fa-large.headerlink,.btn .rst-content table>caption .fa-large.headerlink,.btn .rst-content tt.download span.fa-large:first-child,.btn .wy-menu-vertical li button.fa-large.toctree-expand,.nav .fa-large.icon,.nav .fa.fa-large,.nav .rst-content .code-block-caption .fa-large.headerlink,.nav .rst-content .eqno .fa-large.headerlink,.nav .rst-content .fa-large.admonition-title,.nav .rst-content code.download span.fa-large:first-child,.nav .rst-content dl dt .fa-large.headerlink,.nav .rst-content h1 .fa-large.headerlink,.nav .rst-content h2 .fa-large.headerlink,.nav .rst-content h3 .fa-large.headerlink,.nav .rst-content h4 .fa-large.headerlink,.nav .rst-content h5 .fa-large.headerlink,.nav .rst-content h6 .fa-large.headerlink,.nav .rst-content p .fa-large.headerlink,.nav .rst-content table>caption .fa-large.headerlink,.nav .rst-content tt.download span.fa-large:first-child,.nav .wy-menu-vertical li button.fa-large.toctree-expand,.rst-content .btn .fa-large.admonition-title,.rst-content .code-block-caption .btn .fa-large.headerlink,.rst-content .code-block-caption .nav .fa-large.headerlink,.rst-content .eqno .btn .fa-large.headerlink,.rst-content .eqno .nav .fa-large.headerlink,.rst-content .nav .fa-large.admonition-title,.rst-content code.download .btn span.fa-large:first-child,.rst-content code.download .nav span.fa-large:first-child,.rst-content dl dt .btn .fa-large.headerlink,.rst-content dl dt .nav .fa-large.headerlink,.rst-content h1 .btn .fa-large.headerlink,.rst-content h1 .nav .fa-large.headerlink,.rst-content h2 .btn .fa-large.headerlink,.rst-content h2 .nav .fa-large.headerlink,.rst-content h3 .btn .fa-large.headerlink,.rst-content h3 .nav .fa-large.headerlink,.rst-content h4 .btn .fa-large.headerlink,.rst-content h4 .nav .fa-large.headerlink,.rst-content h5 .btn .fa-large.headerlink,.rst-content h5 .nav .fa-large.headerlink,.rst-content h6 .btn .fa-large.headerlink,.rst-content h6 .nav .fa-large.headerlink,.rst-content p .btn .fa-large.headerlink,.rst-content p .nav .fa-large.headerlink,.rst-content table>caption .btn .fa-large.headerlink,.rst-content table>caption .nav .fa-large.headerlink,.rst-content tt.download .btn span.fa-large:first-child,.rst-content tt.download .nav span.fa-large:first-child,.wy-menu-vertical li .btn button.fa-large.toctree-expand,.wy-menu-vertical li .nav button.fa-large.toctree-expand{line-height:.9em}.btn .fa-spin.icon,.btn .fa.fa-spin,.btn .rst-content .code-block-caption .fa-spin.headerlink,.btn .rst-content .eqno .fa-spin.headerlink,.btn .rst-content .fa-spin.admonition-title,.btn .rst-content code.download span.fa-spin:first-child,.btn .rst-content dl dt .fa-spin.headerlink,.btn .rst-content h1 .fa-spin.headerlink,.btn .rst-content h2 .fa-spin.headerlink,.btn .rst-content h3 .fa-spin.headerlink,.btn .rst-content h4 .fa-spin.headerlink,.btn .rst-content h5 .fa-spin.headerlink,.btn .rst-content h6 .fa-spin.headerlink,.btn .rst-content p .fa-spin.headerlink,.btn .rst-content table>caption .fa-spin.headerlink,.btn .rst-content tt.download span.fa-spin:first-child,.btn .wy-menu-vertical li button.fa-spin.toctree-expand,.nav .fa-spin.icon,.nav .fa.fa-spin,.nav .rst-content .code-block-caption .fa-spin.headerlink,.nav .rst-content .eqno .fa-spin.headerlink,.nav .rst-content .fa-spin.admonition-title,.nav .rst-content code.download span.fa-spin:first-child,.nav .rst-content dl dt .fa-spin.headerlink,.nav .rst-content h1 .fa-spin.headerlink,.nav .rst-content h2 .fa-spin.headerlink,.nav .rst-content h3 .fa-spin.headerlink,.nav .rst-content h4 .fa-spin.headerlink,.nav .rst-content h5 .fa-spin.headerlink,.nav .rst-content h6 .fa-spin.headerlink,.nav .rst-content p .fa-spin.headerlink,.nav .rst-content table>caption .fa-spin.headerlink,.nav .rst-content tt.download span.fa-spin:first-child,.nav .wy-menu-vertical li button.fa-spin.toctree-expand,.rst-content .btn .fa-spin.admonition-title,.rst-content .code-block-caption .btn .fa-spin.headerlink,.rst-content .code-block-caption .nav .fa-spin.headerlink,.rst-content .eqno .btn .fa-spin.headerlink,.rst-content .eqno .nav .fa-spin.headerlink,.rst-content .nav .fa-spin.admonition-title,.rst-content code.download .btn span.fa-spin:first-child,.rst-content code.download .nav span.fa-spin:first-child,.rst-content dl dt .btn .fa-spin.headerlink,.rst-content dl dt .nav .fa-spin.headerlink,.rst-content h1 .btn .fa-spin.headerlink,.rst-content h1 .nav .fa-spin.headerlink,.rst-content h2 .btn .fa-spin.headerlink,.rst-content h2 .nav .fa-spin.headerlink,.rst-content h3 .btn .fa-spin.headerlink,.rst-content h3 .nav .fa-spin.headerlink,.rst-content h4 .btn .fa-spin.headerlink,.rst-content h4 .nav .fa-spin.headerlink,.rst-content h5 .btn .fa-spin.headerlink,.rst-content h5 .nav .fa-spin.headerlink,.rst-content h6 .btn .fa-spin.headerlink,.rst-content h6 .nav .fa-spin.headerlink,.rst-content p .btn .fa-spin.headerlink,.rst-content p .nav .fa-spin.headerlink,.rst-content table>caption .btn .fa-spin.headerlink,.rst-content table>caption .nav .fa-spin.headerlink,.rst-content tt.download .btn span.fa-spin:first-child,.rst-content tt.download .nav span.fa-spin:first-child,.wy-menu-vertical li .btn button.fa-spin.toctree-expand,.wy-menu-vertical li .nav button.fa-spin.toctree-expand{display:inline-block}.btn.fa:before,.btn.icon:before,.rst-content .btn.admonition-title:before,.rst-content .code-block-caption .btn.headerlink:before,.rst-content .eqno .btn.headerlink:before,.rst-content code.download span.btn:first-child:before,.rst-content dl dt .btn.headerlink:before,.rst-content h1 .btn.headerlink:before,.rst-content h2 .btn.headerlink:before,.rst-content h3 .btn.headerlink:before,.rst-content h4 .btn.headerlink:before,.rst-content h5 .btn.headerlink:before,.rst-content h6 .btn.headerlink:before,.rst-content p .btn.headerlink:before,.rst-content table>caption .btn.headerlink:before,.rst-content tt.download span.btn:first-child:before,.wy-menu-vertical li button.btn.toctree-expand:before{opacity:.5;-webkit-transition:opacity .05s ease-in;-moz-transition:opacity .05s ease-in;transition:opacity .05s ease-in}.btn.fa:hover:before,.btn.icon:hover:before,.rst-content .btn.admonition-title:hover:before,.rst-content .code-block-caption .btn.headerlink:hover:before,.rst-content .eqno .btn.headerlink:hover:before,.rst-content code.download span.btn:first-child:hover:before,.rst-content dl dt .btn.headerlink:hover:before,.rst-content h1 .btn.headerlink:hover:before,.rst-content h2 .btn.headerlink:hover:before,.rst-content h3 .btn.headerlink:hover:before,.rst-content h4 .btn.headerlink:hover:before,.rst-content h5 .btn.headerlink:hover:before,.rst-content h6 .btn.headerlink:hover:before,.rst-content p .btn.headerlink:hover:before,.rst-content table>caption .btn.headerlink:hover:before,.rst-content tt.download span.btn:first-child:hover:before,.wy-menu-vertical li button.btn.toctree-expand:hover:before{opacity:1}.btn-mini .fa:before,.btn-mini .icon:before,.btn-mini .rst-content .admonition-title:before,.btn-mini .rst-content .code-block-caption .headerlink:before,.btn-mini .rst-content .eqno .headerlink:before,.btn-mini .rst-content code.download span:first-child:before,.btn-mini .rst-content dl dt .headerlink:before,.btn-mini .rst-content h1 .headerlink:before,.btn-mini .rst-content h2 .headerlink:before,.btn-mini .rst-content h3 .headerlink:before,.btn-mini .rst-content h4 .headerlink:before,.btn-mini .rst-content h5 .headerlink:before,.btn-mini .rst-content h6 .headerlink:before,.btn-mini .rst-content p .headerlink:before,.btn-mini .rst-content table>caption .headerlink:before,.btn-mini .rst-content tt.download span:first-child:before,.btn-mini .wy-menu-vertical li button.toctree-expand:before,.rst-content .btn-mini .admonition-title:before,.rst-content .code-block-caption .btn-mini .headerlink:before,.rst-content .eqno .btn-mini .headerlink:before,.rst-content code.download .btn-mini span:first-child:before,.rst-content dl dt .btn-mini .headerlink:before,.rst-content h1 .btn-mini .headerlink:before,.rst-content h2 .btn-mini .headerlink:before,.rst-content h3 .btn-mini .headerlink:before,.rst-content h4 .btn-mini .headerlink:before,.rst-content h5 .btn-mini .headerlink:before,.rst-content h6 .btn-mini .headerlink:before,.rst-content p .btn-mini .headerlink:before,.rst-content table>caption .btn-mini .headerlink:before,.rst-content tt.download .btn-mini span:first-child:before,.wy-menu-vertical li .btn-mini button.toctree-expand:before{font-size:14px;vertical-align:-15%}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.wy-alert{padding:12px;line-height:24px;margin-bottom:24px;background:#e7f2fa}.rst-content .admonition-title,.wy-alert-title{font-weight:700;display:block;color:#fff;background:#6ab0de;padding:6px 12px;margin:-12px -12px 12px}.rst-content .danger,.rst-content .error,.rst-content .wy-alert-danger.admonition,.rst-content .wy-alert-danger.admonition-todo,.rst-content .wy-alert-danger.attention,.rst-content .wy-alert-danger.caution,.rst-content .wy-alert-danger.hint,.rst-content .wy-alert-danger.important,.rst-content .wy-alert-danger.note,.rst-content .wy-alert-danger.seealso,.rst-content .wy-alert-danger.tip,.rst-content .wy-alert-danger.warning,.wy-alert.wy-alert-danger{background:#fdf3f2}.rst-content .danger .admonition-title,.rst-content .danger .wy-alert-title,.rst-content .error .admonition-title,.rst-content .error .wy-alert-title,.rst-content .wy-alert-danger.admonition-todo .admonition-title,.rst-content .wy-alert-danger.admonition-todo .wy-alert-title,.rst-content .wy-alert-danger.admonition .admonition-title,.rst-content .wy-alert-danger.admonition .wy-alert-title,.rst-content .wy-alert-danger.attention .admonition-title,.rst-content .wy-alert-danger.attention .wy-alert-title,.rst-content .wy-alert-danger.caution .admonition-title,.rst-content .wy-alert-danger.caution .wy-alert-title,.rst-content .wy-alert-danger.hint .admonition-title,.rst-content .wy-alert-danger.hint .wy-alert-title,.rst-content .wy-alert-danger.important .admonition-title,.rst-content .wy-alert-danger.important .wy-alert-title,.rst-content .wy-alert-danger.note .admonition-title,.rst-content .wy-alert-danger.note .wy-alert-title,.rst-content .wy-alert-danger.seealso .admonition-title,.rst-content .wy-alert-danger.seealso .wy-alert-title,.rst-content .wy-alert-danger.tip .admonition-title,.rst-content .wy-alert-danger.tip .wy-alert-title,.rst-content .wy-alert-danger.warning .admonition-title,.rst-content .wy-alert-danger.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-danger .admonition-title,.wy-alert.wy-alert-danger .rst-content .admonition-title,.wy-alert.wy-alert-danger .wy-alert-title{background:#f29f97}.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .warning,.rst-content .wy-alert-warning.admonition,.rst-content .wy-alert-warning.danger,.rst-content .wy-alert-warning.error,.rst-content .wy-alert-warning.hint,.rst-content .wy-alert-warning.important,.rst-content .wy-alert-warning.note,.rst-content .wy-alert-warning.seealso,.rst-content .wy-alert-warning.tip,.wy-alert.wy-alert-warning{background:#ffedcc}.rst-content .admonition-todo .admonition-title,.rst-content .admonition-todo .wy-alert-title,.rst-content .attention .admonition-title,.rst-content .attention .wy-alert-title,.rst-content .caution .admonition-title,.rst-content .caution .wy-alert-title,.rst-content .warning .admonition-title,.rst-content .warning .wy-alert-title,.rst-content .wy-alert-warning.admonition .admonition-title,.rst-content .wy-alert-warning.admonition .wy-alert-title,.rst-content .wy-alert-warning.danger .admonition-title,.rst-content .wy-alert-warning.danger .wy-alert-title,.rst-content .wy-alert-warning.error .admonition-title,.rst-content .wy-alert-warning.error .wy-alert-title,.rst-content .wy-alert-warning.hint .admonition-title,.rst-content .wy-alert-warning.hint .wy-alert-title,.rst-content .wy-alert-warning.important .admonition-title,.rst-content .wy-alert-warning.important .wy-alert-title,.rst-content .wy-alert-warning.note .admonition-title,.rst-content .wy-alert-warning.note .wy-alert-title,.rst-content .wy-alert-warning.seealso .admonition-title,.rst-content .wy-alert-warning.seealso .wy-alert-title,.rst-content .wy-alert-warning.tip .admonition-title,.rst-content .wy-alert-warning.tip .wy-alert-title,.rst-content .wy-alert.wy-alert-warning .admonition-title,.wy-alert.wy-alert-warning .rst-content .admonition-title,.wy-alert.wy-alert-warning .wy-alert-title{background:#f0b37e}.rst-content .note,.rst-content .seealso,.rst-content .wy-alert-info.admonition,.rst-content .wy-alert-info.admonition-todo,.rst-content .wy-alert-info.attention,.rst-content .wy-alert-info.caution,.rst-content .wy-alert-info.danger,.rst-content .wy-alert-info.error,.rst-content .wy-alert-info.hint,.rst-content .wy-alert-info.important,.rst-content .wy-alert-info.tip,.rst-content .wy-alert-info.warning,.wy-alert.wy-alert-info{background:#e7f2fa}.rst-content .note .admonition-title,.rst-content .note .wy-alert-title,.rst-content .seealso .admonition-title,.rst-content .seealso .wy-alert-title,.rst-content .wy-alert-info.admonition-todo .admonition-title,.rst-content .wy-alert-info.admonition-todo .wy-alert-title,.rst-content .wy-alert-info.admonition .admonition-title,.rst-content .wy-alert-info.admonition .wy-alert-title,.rst-content .wy-alert-info.attention .admonition-title,.rst-content .wy-alert-info.attention .wy-alert-title,.rst-content .wy-alert-info.caution .admonition-title,.rst-content .wy-alert-info.caution .wy-alert-title,.rst-content .wy-alert-info.danger .admonition-title,.rst-content .wy-alert-info.danger .wy-alert-title,.rst-content .wy-alert-info.error .admonition-title,.rst-content .wy-alert-info.error .wy-alert-title,.rst-content .wy-alert-info.hint .admonition-title,.rst-content .wy-alert-info.hint .wy-alert-title,.rst-content .wy-alert-info.important .admonition-title,.rst-content .wy-alert-info.important .wy-alert-title,.rst-content .wy-alert-info.tip .admonition-title,.rst-content .wy-alert-info.tip .wy-alert-title,.rst-content .wy-alert-info.warning .admonition-title,.rst-content .wy-alert-info.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-info .admonition-title,.wy-alert.wy-alert-info .rst-content .admonition-title,.wy-alert.wy-alert-info .wy-alert-title{background:#6ab0de}.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .wy-alert-success.admonition,.rst-content .wy-alert-success.admonition-todo,.rst-content .wy-alert-success.attention,.rst-content .wy-alert-success.caution,.rst-content .wy-alert-success.danger,.rst-content .wy-alert-success.error,.rst-content .wy-alert-success.note,.rst-content .wy-alert-success.seealso,.rst-content .wy-alert-success.warning,.wy-alert.wy-alert-success{background:#dbfaf4}.rst-content .hint .admonition-title,.rst-content .hint .wy-alert-title,.rst-content .important .admonition-title,.rst-content .important .wy-alert-title,.rst-content .tip .admonition-title,.rst-content .tip .wy-alert-title,.rst-content .wy-alert-success.admonition-todo .admonition-title,.rst-content .wy-alert-success.admonition-todo .wy-alert-title,.rst-content .wy-alert-success.admonition .admonition-title,.rst-content .wy-alert-success.admonition .wy-alert-title,.rst-content .wy-alert-success.attention .admonition-title,.rst-content .wy-alert-success.attention .wy-alert-title,.rst-content .wy-alert-success.caution .admonition-title,.rst-content .wy-alert-success.caution .wy-alert-title,.rst-content .wy-alert-success.danger .admonition-title,.rst-content .wy-alert-success.danger .wy-alert-title,.rst-content .wy-alert-success.error .admonition-title,.rst-content .wy-alert-success.error .wy-alert-title,.rst-content .wy-alert-success.note .admonition-title,.rst-content .wy-alert-success.note .wy-alert-title,.rst-content .wy-alert-success.seealso .admonition-title,.rst-content .wy-alert-success.seealso .wy-alert-title,.rst-content .wy-alert-success.warning .admonition-title,.rst-content .wy-alert-success.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-success .admonition-title,.wy-alert.wy-alert-success .rst-content .admonition-title,.wy-alert.wy-alert-success .wy-alert-title{background:#1abc9c}.rst-content .wy-alert-neutral.admonition,.rst-content .wy-alert-neutral.admonition-todo,.rst-content .wy-alert-neutral.attention,.rst-content .wy-alert-neutral.caution,.rst-content .wy-alert-neutral.danger,.rst-content .wy-alert-neutral.error,.rst-content .wy-alert-neutral.hint,.rst-content .wy-alert-neutral.important,.rst-content .wy-alert-neutral.note,.rst-content .wy-alert-neutral.seealso,.rst-content .wy-alert-neutral.tip,.rst-content .wy-alert-neutral.warning,.wy-alert.wy-alert-neutral{background:#f3f6f6}.rst-content .wy-alert-neutral.admonition-todo .admonition-title,.rst-content .wy-alert-neutral.admonition-todo .wy-alert-title,.rst-content .wy-alert-neutral.admonition .admonition-title,.rst-content .wy-alert-neutral.admonition .wy-alert-title,.rst-content .wy-alert-neutral.attention .admonition-title,.rst-content .wy-alert-neutral.attention .wy-alert-title,.rst-content .wy-alert-neutral.caution .admonition-title,.rst-content .wy-alert-neutral.caution .wy-alert-title,.rst-content .wy-alert-neutral.danger .admonition-title,.rst-content .wy-alert-neutral.danger .wy-alert-title,.rst-content .wy-alert-neutral.error .admonition-title,.rst-content .wy-alert-neutral.error .wy-alert-title,.rst-content .wy-alert-neutral.hint .admonition-title,.rst-content .wy-alert-neutral.hint .wy-alert-title,.rst-content .wy-alert-neutral.important .admonition-title,.rst-content .wy-alert-neutral.important .wy-alert-title,.rst-content .wy-alert-neutral.note .admonition-title,.rst-content .wy-alert-neutral.note .wy-alert-title,.rst-content .wy-alert-neutral.seealso .admonition-title,.rst-content .wy-alert-neutral.seealso .wy-alert-title,.rst-content .wy-alert-neutral.tip .admonition-title,.rst-content .wy-alert-neutral.tip .wy-alert-title,.rst-content .wy-alert-neutral.warning .admonition-title,.rst-content .wy-alert-neutral.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-neutral .admonition-title,.wy-alert.wy-alert-neutral .rst-content .admonition-title,.wy-alert.wy-alert-neutral .wy-alert-title{color:#404040;background:#e1e4e5}.rst-content .wy-alert-neutral.admonition-todo a,.rst-content .wy-alert-neutral.admonition a,.rst-content .wy-alert-neutral.attention a,.rst-content .wy-alert-neutral.caution a,.rst-content .wy-alert-neutral.danger a,.rst-content .wy-alert-neutral.error a,.rst-content .wy-alert-neutral.hint a,.rst-content .wy-alert-neutral.important a,.rst-content .wy-alert-neutral.note a,.rst-content .wy-alert-neutral.seealso a,.rst-content .wy-alert-neutral.tip a,.rst-content .wy-alert-neutral.warning a,.wy-alert.wy-alert-neutral a{color:#2980b9}.rst-content .admonition-todo p:last-child,.rst-content .admonition p:last-child,.rst-content .attention p:last-child,.rst-content .caution p:last-child,.rst-content .danger p:last-child,.rst-content .error p:last-child,.rst-content .hint p:last-child,.rst-content .important p:last-child,.rst-content .note p:last-child,.rst-content .seealso p:last-child,.rst-content .tip p:last-child,.rst-content .warning p:last-child,.wy-alert p:last-child{margin-bottom:0}.wy-tray-container{position:fixed;bottom:0;left:0;z-index:600}.wy-tray-container li{display:block;width:300px;background:transparent;color:#fff;text-align:center;box-shadow:0 5px 5px 0 rgba(0,0,0,.1);padding:0 24px;min-width:20%;opacity:0;height:0;line-height:56px;overflow:hidden;-webkit-transition:all .3s ease-in;-moz-transition:all .3s ease-in;transition:all .3s ease-in}.wy-tray-container li.wy-tray-item-success{background:#27ae60}.wy-tray-container li.wy-tray-item-info{background:#2980b9}.wy-tray-container li.wy-tray-item-warning{background:#e67e22}.wy-tray-container li.wy-tray-item-danger{background:#e74c3c}.wy-tray-container li.on{opacity:1;height:56px}@media screen and (max-width:768px){.wy-tray-container{bottom:auto;top:0;width:100%}.wy-tray-container li{width:100%}}button{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle;cursor:pointer;line-height:normal;-webkit-appearance:button;*overflow:visible}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}button[disabled]{cursor:default}.btn{display:inline-block;border-radius:2px;line-height:normal;white-space:nowrap;text-align:center;cursor:pointer;font-size:100%;padding:6px 12px 8px;color:#fff;border:1px solid rgba(0,0,0,.1);background-color:#27ae60;text-decoration:none;font-weight:400;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 2px -1px hsla(0,0%,100%,.5),inset 0 -2px 0 0 rgba(0,0,0,.1);outline-none:false;vertical-align:middle;*display:inline;zoom:1;-webkit-user-drag:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transition:all .1s linear;-moz-transition:all .1s linear;transition:all .1s linear}.btn-hover{background:#2e8ece;color:#fff}.btn:hover{background:#2cc36b;color:#fff}.btn:focus{background:#2cc36b;outline:0}.btn:active{box-shadow:inset 0 -1px 0 0 rgba(0,0,0,.05),inset 0 2px 0 0 rgba(0,0,0,.1);padding:8px 12px 6px}.btn:visited{color:#fff}.btn-disabled,.btn-disabled:active,.btn-disabled:focus,.btn-disabled:hover,.btn:disabled{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:.4;cursor:not-allowed;box-shadow:none}.btn::-moz-focus-inner{padding:0;border:0}.btn-small{font-size:80%}.btn-info{background-color:#2980b9!important}.btn-info:hover{background-color:#2e8ece!important}.btn-neutral{background-color:#f3f6f6!important;color:#404040!important}.btn-neutral:hover{background-color:#e5ebeb!important;color:#404040}.btn-neutral:visited{color:#404040!important}.btn-success{background-color:#27ae60!important}.btn-success:hover{background-color:#295!important}.btn-danger{background-color:#e74c3c!important}.btn-danger:hover{background-color:#ea6153!important}.btn-warning{background-color:#e67e22!important}.btn-warning:hover{background-color:#e98b39!important}.btn-invert{background-color:#222}.btn-invert:hover{background-color:#2f2f2f!important}.btn-link{background-color:transparent!important;color:#2980b9;box-shadow:none;border-color:transparent!important}.btn-link:active,.btn-link:hover{background-color:transparent!important;color:#409ad5!important;box-shadow:none}.btn-link:visited{color:#9b59b6}.wy-btn-group .btn,.wy-control .btn{vertical-align:middle}.wy-btn-group{margin-bottom:24px;*zoom:1}.wy-btn-group:after,.wy-btn-group:before{display:table;content:""}.wy-btn-group:after{clear:both}.wy-dropdown{position:relative;display:inline-block}.wy-dropdown-active .wy-dropdown-menu{display:block}.wy-dropdown-menu{position:absolute;left:0;display:none;float:left;top:100%;min-width:100%;background:#fcfcfc;z-index:100;border:1px solid #cfd7dd;box-shadow:0 2px 2px 0 rgba(0,0,0,.1);padding:12px}.wy-dropdown-menu>dd>a{display:block;clear:both;color:#404040;white-space:nowrap;font-size:90%;padding:0 12px;cursor:pointer}.wy-dropdown-menu>dd>a:hover{background:#2980b9;color:#fff}.wy-dropdown-menu>dd.divider{border-top:1px solid #cfd7dd;margin:6px 0}.wy-dropdown-menu>dd.search{padding-bottom:12px}.wy-dropdown-menu>dd.search input[type=search]{width:100%}.wy-dropdown-menu>dd.call-to-action{background:#e3e3e3;text-transform:uppercase;font-weight:500;font-size:80%}.wy-dropdown-menu>dd.call-to-action:hover{background:#e3e3e3}.wy-dropdown-menu>dd.call-to-action .btn{color:#fff}.wy-dropdown.wy-dropdown-up .wy-dropdown-menu{bottom:100%;top:auto;left:auto;right:0}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu{background:#fcfcfc;margin-top:2px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a{padding:6px 12px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a:hover{background:#2980b9;color:#fff}.wy-dropdown.wy-dropdown-left .wy-dropdown-menu{right:0;left:auto;text-align:right}.wy-dropdown-arrow:before{content:" ";border-bottom:5px solid #f5f5f5;border-left:5px solid transparent;border-right:5px solid transparent;position:absolute;display:block;top:-4px;left:50%;margin-left:-3px}.wy-dropdown-arrow.wy-dropdown-arrow-left:before{left:11px}.wy-form-stacked select{display:block}.wy-form-aligned .wy-help-inline,.wy-form-aligned input,.wy-form-aligned label,.wy-form-aligned select,.wy-form-aligned textarea{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-form-aligned .wy-control-group>label{display:inline-block;vertical-align:middle;width:10em;margin:6px 12px 0 0;float:left}.wy-form-aligned .wy-control{float:left}.wy-form-aligned .wy-control label{display:block}.wy-form-aligned .wy-control select{margin-top:6px}fieldset{margin:0}fieldset,legend{border:0;padding:0}legend{width:100%;white-space:normal;margin-bottom:24px;font-size:150%;*margin-left:-7px}label,legend{display:block}label{margin:0 0 .3125em;color:#333;font-size:90%}input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}.wy-control-group{margin-bottom:24px;max-width:1200px;margin-left:auto;margin-right:auto;*zoom:1}.wy-control-group:after,.wy-control-group:before{display:table;content:""}.wy-control-group:after{clear:both}.wy-control-group.wy-control-group-required>label:after{content:" *";color:#e74c3c}.wy-control-group .wy-form-full,.wy-control-group .wy-form-halves,.wy-control-group .wy-form-thirds{padding-bottom:12px}.wy-control-group .wy-form-full input[type=color],.wy-control-group .wy-form-full input[type=date],.wy-control-group .wy-form-full input[type=datetime-local],.wy-control-group .wy-form-full input[type=datetime],.wy-control-group .wy-form-full input[type=email],.wy-control-group .wy-form-full input[type=month],.wy-control-group .wy-form-full input[type=number],.wy-control-group .wy-form-full input[type=password],.wy-control-group .wy-form-full input[type=search],.wy-control-group .wy-form-full input[type=tel],.wy-control-group .wy-form-full input[type=text],.wy-control-group .wy-form-full input[type=time],.wy-control-group .wy-form-full input[type=url],.wy-control-group .wy-form-full input[type=week],.wy-control-group .wy-form-full select,.wy-control-group .wy-form-halves input[type=color],.wy-control-group .wy-form-halves input[type=date],.wy-control-group .wy-form-halves input[type=datetime-local],.wy-control-group .wy-form-halves input[type=datetime],.wy-control-group .wy-form-halves input[type=email],.wy-control-group .wy-form-halves input[type=month],.wy-control-group .wy-form-halves input[type=number],.wy-control-group .wy-form-halves input[type=password],.wy-control-group .wy-form-halves input[type=search],.wy-control-group .wy-form-halves input[type=tel],.wy-control-group .wy-form-halves input[type=text],.wy-control-group .wy-form-halves input[type=time],.wy-control-group .wy-form-halves input[type=url],.wy-control-group .wy-form-halves input[type=week],.wy-control-group .wy-form-halves select,.wy-control-group .wy-form-thirds input[type=color],.wy-control-group .wy-form-thirds input[type=date],.wy-control-group .wy-form-thirds input[type=datetime-local],.wy-control-group .wy-form-thirds input[type=datetime],.wy-control-group .wy-form-thirds input[type=email],.wy-control-group .wy-form-thirds input[type=month],.wy-control-group .wy-form-thirds input[type=number],.wy-control-group .wy-form-thirds input[type=password],.wy-control-group .wy-form-thirds input[type=search],.wy-control-group .wy-form-thirds input[type=tel],.wy-control-group .wy-form-thirds input[type=text],.wy-control-group .wy-form-thirds input[type=time],.wy-control-group .wy-form-thirds input[type=url],.wy-control-group .wy-form-thirds input[type=week],.wy-control-group .wy-form-thirds select{width:100%}.wy-control-group .wy-form-full{float:left;display:block;width:100%;margin-right:0}.wy-control-group .wy-form-full:last-child{margin-right:0}.wy-control-group .wy-form-halves{float:left;display:block;margin-right:2.35765%;width:48.82117%}.wy-control-group .wy-form-halves:last-child,.wy-control-group .wy-form-halves:nth-of-type(2n){margin-right:0}.wy-control-group .wy-form-halves:nth-of-type(odd){clear:left}.wy-control-group .wy-form-thirds{float:left;display:block;margin-right:2.35765%;width:31.76157%}.wy-control-group .wy-form-thirds:last-child,.wy-control-group .wy-form-thirds:nth-of-type(3n){margin-right:0}.wy-control-group .wy-form-thirds:nth-of-type(3n+1){clear:left}.wy-control-group.wy-control-group-no-input .wy-control,.wy-control-no-input{margin:6px 0 0;font-size:90%}.wy-control-no-input{display:inline-block}.wy-control-group.fluid-input input[type=color],.wy-control-group.fluid-input input[type=date],.wy-control-group.fluid-input input[type=datetime-local],.wy-control-group.fluid-input input[type=datetime],.wy-control-group.fluid-input input[type=email],.wy-control-group.fluid-input input[type=month],.wy-control-group.fluid-input input[type=number],.wy-control-group.fluid-input input[type=password],.wy-control-group.fluid-input input[type=search],.wy-control-group.fluid-input input[type=tel],.wy-control-group.fluid-input input[type=text],.wy-control-group.fluid-input input[type=time],.wy-control-group.fluid-input input[type=url],.wy-control-group.fluid-input input[type=week]{width:100%}.wy-form-message-inline{padding-left:.3em;color:#666;font-size:90%}.wy-form-message{display:block;color:#999;font-size:70%;margin-top:.3125em;font-style:italic}.wy-form-message p{font-size:inherit;font-style:italic;margin-bottom:6px}.wy-form-message p:last-child{margin-bottom:0}input{line-height:normal}input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;*overflow:visible}input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week]{-webkit-appearance:none;padding:6px;display:inline-block;border:1px solid #ccc;font-size:80%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 3px #ddd;border-radius:0;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}input[type=datetime-local]{padding:.34375em .625em}input[disabled]{cursor:default}input[type=checkbox],input[type=radio]{padding:0;margin-right:.3125em;*height:13px;*width:13px}input[type=checkbox],input[type=radio],input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}input[type=color]:focus,input[type=date]:focus,input[type=datetime-local]:focus,input[type=datetime]:focus,input[type=email]:focus,input[type=month]:focus,input[type=number]:focus,input[type=password]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=time]:focus,input[type=url]:focus,input[type=week]:focus{outline:0;outline:thin dotted\9;border-color:#333}input.no-focus:focus{border-color:#ccc!important}input[type=checkbox]:focus,input[type=file]:focus,input[type=radio]:focus{outline:thin dotted #333;outline:1px auto #129fea}input[type=color][disabled],input[type=date][disabled],input[type=datetime-local][disabled],input[type=datetime][disabled],input[type=email][disabled],input[type=month][disabled],input[type=number][disabled],input[type=password][disabled],input[type=search][disabled],input[type=tel][disabled],input[type=text][disabled],input[type=time][disabled],input[type=url][disabled],input[type=week][disabled]{cursor:not-allowed;background-color:#fafafa}input:focus:invalid,select:focus:invalid,textarea:focus:invalid{color:#e74c3c;border:1px solid #e74c3c}input:focus:invalid:focus,select:focus:invalid:focus,textarea:focus:invalid:focus{border-color:#e74c3c}input[type=checkbox]:focus:invalid:focus,input[type=file]:focus:invalid:focus,input[type=radio]:focus:invalid:focus{outline-color:#e74c3c}input.wy-input-large{padding:12px;font-size:100%}textarea{overflow:auto;vertical-align:top;width:100%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif}select,textarea{padding:.5em .625em;display:inline-block;border:1px solid #ccc;font-size:80%;box-shadow:inset 0 1px 3px #ddd;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}select{border:1px solid #ccc;background-color:#fff}select[multiple]{height:auto}select:focus,textarea:focus{outline:0}input[readonly],select[disabled],select[readonly],textarea[disabled],textarea[readonly]{cursor:not-allowed;background-color:#fafafa}input[type=checkbox][disabled],input[type=radio][disabled]{cursor:not-allowed}.wy-checkbox,.wy-radio{margin:6px 0;color:#404040;display:block}.wy-checkbox input,.wy-radio input{vertical-align:baseline}.wy-form-message-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-input-prefix,.wy-input-suffix{white-space:nowrap;padding:6px}.wy-input-prefix .wy-input-context,.wy-input-suffix .wy-input-context{line-height:27px;padding:0 8px;display:inline-block;font-size:80%;background-color:#f3f6f6;border:1px solid #ccc;color:#999}.wy-input-suffix .wy-input-context{border-left:0}.wy-input-prefix .wy-input-context{border-right:0}.wy-switch{position:relative;display:block;height:24px;margin-top:12px;cursor:pointer}.wy-switch:before{left:0;top:0;width:36px;height:12px;background:#ccc}.wy-switch:after,.wy-switch:before{position:absolute;content:"";display:block;border-radius:4px;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.wy-switch:after{width:18px;height:18px;background:#999;left:-3px;top:-3px}.wy-switch span{position:absolute;left:48px;display:block;font-size:12px;color:#ccc;line-height:1}.wy-switch.active:before{background:#1e8449}.wy-switch.active:after{left:24px;background:#27ae60}.wy-switch.disabled{cursor:not-allowed;opacity:.8}.wy-control-group.wy-control-group-error .wy-form-message,.wy-control-group.wy-control-group-error>label{color:#e74c3c}.wy-control-group.wy-control-group-error input[type=color],.wy-control-group.wy-control-group-error input[type=date],.wy-control-group.wy-control-group-error input[type=datetime-local],.wy-control-group.wy-control-group-error input[type=datetime],.wy-control-group.wy-control-group-error input[type=email],.wy-control-group.wy-control-group-error input[type=month],.wy-control-group.wy-control-group-error input[type=number],.wy-control-group.wy-control-group-error input[type=password],.wy-control-group.wy-control-group-error input[type=search],.wy-control-group.wy-control-group-error input[type=tel],.wy-control-group.wy-control-group-error input[type=text],.wy-control-group.wy-control-group-error input[type=time],.wy-control-group.wy-control-group-error input[type=url],.wy-control-group.wy-control-group-error input[type=week],.wy-control-group.wy-control-group-error textarea{border:1px solid #e74c3c}.wy-inline-validate{white-space:nowrap}.wy-inline-validate .wy-input-context{padding:.5em .625em;display:inline-block;font-size:80%}.wy-inline-validate.wy-inline-validate-success .wy-input-context{color:#27ae60}.wy-inline-validate.wy-inline-validate-danger .wy-input-context{color:#e74c3c}.wy-inline-validate.wy-inline-validate-warning .wy-input-context{color:#e67e22}.wy-inline-validate.wy-inline-validate-info .wy-input-context{color:#2980b9}.rotate-90{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.rotate-180{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.rotate-270{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.mirror{-webkit-transform:scaleX(-1);-moz-transform:scaleX(-1);-ms-transform:scaleX(-1);-o-transform:scaleX(-1);transform:scaleX(-1)}.mirror.rotate-90{-webkit-transform:scaleX(-1) rotate(90deg);-moz-transform:scaleX(-1) rotate(90deg);-ms-transform:scaleX(-1) rotate(90deg);-o-transform:scaleX(-1) rotate(90deg);transform:scaleX(-1) rotate(90deg)}.mirror.rotate-180{-webkit-transform:scaleX(-1) rotate(180deg);-moz-transform:scaleX(-1) rotate(180deg);-ms-transform:scaleX(-1) rotate(180deg);-o-transform:scaleX(-1) rotate(180deg);transform:scaleX(-1) rotate(180deg)}.mirror.rotate-270{-webkit-transform:scaleX(-1) rotate(270deg);-moz-transform:scaleX(-1) rotate(270deg);-ms-transform:scaleX(-1) rotate(270deg);-o-transform:scaleX(-1) rotate(270deg);transform:scaleX(-1) rotate(270deg)}@media only screen and (max-width:480px){.wy-form button[type=submit]{margin:.7em 0 0}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=text],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week],.wy-form label{margin-bottom:.3em;display:block}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week]{margin-bottom:0}.wy-form-aligned .wy-control-group label{margin-bottom:.3em;text-align:left;display:block;width:100%}.wy-form-aligned .wy-control{margin:1.5em 0 0}.wy-form-message,.wy-form-message-inline,.wy-form .wy-help-inline{display:block;font-size:80%;padding:6px 0}}@media screen and (max-width:768px){.tablet-hide{display:none}}@media screen and (max-width:480px){.mobile-hide{display:none}}.float-left{float:left}.float-right{float:right}.full-width{width:100%}.rst-content table.docutils,.rst-content table.field-list,.wy-table{border-collapse:collapse;border-spacing:0;empty-cells:show;margin-bottom:24px}.rst-content table.docutils caption,.rst-content table.field-list caption,.wy-table caption{color:#000;font:italic 85%/1 arial,sans-serif;padding:1em 0;text-align:center}.rst-content table.docutils td,.rst-content table.docutils th,.rst-content table.field-list td,.rst-content table.field-list th,.wy-table td,.wy-table th{font-size:90%;margin:0;overflow:visible;padding:8px 16px}.rst-content table.docutils td:first-child,.rst-content table.docutils th:first-child,.rst-content table.field-list td:first-child,.rst-content table.field-list th:first-child,.wy-table td:first-child,.wy-table th:first-child{border-left-width:0}.rst-content table.docutils thead,.rst-content table.field-list thead,.wy-table thead{color:#000;text-align:left;vertical-align:bottom;white-space:nowrap}.rst-content table.docutils thead th,.rst-content table.field-list thead th,.wy-table thead th{font-weight:700;border-bottom:2px solid #e1e4e5}.rst-content table.docutils td,.rst-content table.field-list td,.wy-table td{background-color:transparent;vertical-align:middle}.rst-content table.docutils td p,.rst-content table.field-list td p,.wy-table td p{line-height:18px}.rst-content table.docutils td p:last-child,.rst-content table.field-list td p:last-child,.wy-table td p:last-child{margin-bottom:0}.rst-content table.docutils .wy-table-cell-min,.rst-content table.field-list .wy-table-cell-min,.wy-table .wy-table-cell-min{width:1%;padding-right:0}.rst-content table.docutils .wy-table-cell-min input[type=checkbox],.rst-content table.field-list .wy-table-cell-min input[type=checkbox],.wy-table .wy-table-cell-min input[type=checkbox]{margin:0}.wy-table-secondary{color:grey;font-size:90%}.wy-table-tertiary{color:grey;font-size:80%}.rst-content table.docutils:not(.field-list) tr:nth-child(2n-1) td,.wy-table-backed,.wy-table-odd td,.wy-table-striped tr:nth-child(2n-1) td{background-color:#f3f6f6}.rst-content table.docutils,.wy-table-bordered-all{border:1px solid #e1e4e5}.rst-content table.docutils td,.wy-table-bordered-all td{border-bottom:1px solid #e1e4e5;border-left:1px solid #e1e4e5}.rst-content table.docutils tbody>tr:last-child td,.wy-table-bordered-all tbody>tr:last-child td{border-bottom-width:0}.wy-table-bordered{border:1px solid #e1e4e5}.wy-table-bordered-rows td{border-bottom:1px solid #e1e4e5}.wy-table-bordered-rows tbody>tr:last-child td{border-bottom-width:0}.wy-table-horizontal td,.wy-table-horizontal th{border-width:0 0 1px;border-bottom:1px solid #e1e4e5}.wy-table-horizontal tbody>tr:last-child td{border-bottom-width:0}.wy-table-responsive{margin-bottom:24px;max-width:100%;overflow:auto}.wy-table-responsive table{margin-bottom:0!important}.wy-table-responsive table td,.wy-table-responsive table th{white-space:nowrap}a{color:#2980b9;text-decoration:none;cursor:pointer}a:hover{color:#3091d1}a:visited{color:#9b59b6}html{height:100%}body,html{overflow-x:hidden}body{font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;font-weight:400;color:#404040;min-height:100%;background:#edf0f2}.wy-text-left{text-align:left}.wy-text-center{text-align:center}.wy-text-right{text-align:right}.wy-text-large{font-size:120%}.wy-text-normal{font-size:100%}.wy-text-small,small{font-size:80%}.wy-text-strike{text-decoration:line-through}.wy-text-warning{color:#e67e22!important}a.wy-text-warning:hover{color:#eb9950!important}.wy-text-info{color:#2980b9!important}a.wy-text-info:hover{color:#409ad5!important}.wy-text-success{color:#27ae60!important}a.wy-text-success:hover{color:#36d278!important}.wy-text-danger{color:#e74c3c!important}a.wy-text-danger:hover{color:#ed7669!important}.wy-text-neutral{color:#404040!important}a.wy-text-neutral:hover{color:#595959!important}.rst-content .toctree-wrapper>p.caption,h1,h2,h3,h4,h5,h6,legend{margin-top:0;font-weight:700;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif}p{line-height:24px;font-size:16px;margin:0 0 24px}h1{font-size:175%}.rst-content .toctree-wrapper>p.caption,h2{font-size:150%}h3{font-size:125%}h4{font-size:115%}h5{font-size:110%}h6{font-size:100%}hr{display:block;height:1px;border:0;border-top:1px solid #e1e4e5;margin:24px 0;padding:0}.rst-content code,.rst-content tt,code{white-space:nowrap;max-width:100%;background:#fff;border:1px solid #e1e4e5;font-size:75%;padding:0 5px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#e74c3c;overflow-x:auto}.rst-content tt.code-large,code.code-large{font-size:90%}.rst-content .section ul,.rst-content .toctree-wrapper ul,.rst-content section ul,.wy-plain-list-disc,article ul{list-style:disc;line-height:24px;margin-bottom:24px}.rst-content .section ul li,.rst-content .toctree-wrapper ul li,.rst-content section ul li,.wy-plain-list-disc li,article ul li{list-style:disc;margin-left:24px}.rst-content .section ul li p:last-child,.rst-content .section ul li ul,.rst-content .toctree-wrapper ul li p:last-child,.rst-content .toctree-wrapper ul li ul,.rst-content section ul li p:last-child,.rst-content section ul li ul,.wy-plain-list-disc li p:last-child,.wy-plain-list-disc li ul,article ul li p:last-child,article ul li ul{margin-bottom:0}.rst-content .section ul li li,.rst-content .toctree-wrapper ul li li,.rst-content section ul li li,.wy-plain-list-disc li li,article ul li li{list-style:circle}.rst-content .section ul li li li,.rst-content .toctree-wrapper ul li li li,.rst-content section ul li li li,.wy-plain-list-disc li li li,article ul li li li{list-style:square}.rst-content .section ul li ol li,.rst-content .toctree-wrapper ul li ol li,.rst-content section ul li ol li,.wy-plain-list-disc li ol li,article ul li ol li{list-style:decimal}.rst-content .section ol,.rst-content .section ol.arabic,.rst-content .toctree-wrapper ol,.rst-content .toctree-wrapper ol.arabic,.rst-content section ol,.rst-content section ol.arabic,.wy-plain-list-decimal,article ol{list-style:decimal;line-height:24px;margin-bottom:24px}.rst-content .section ol.arabic li,.rst-content .section ol li,.rst-content .toctree-wrapper ol.arabic li,.rst-content .toctree-wrapper ol li,.rst-content section ol.arabic li,.rst-content section ol li,.wy-plain-list-decimal li,article ol li{list-style:decimal;margin-left:24px}.rst-content .section ol.arabic li ul,.rst-content .section ol li p:last-child,.rst-content .section ol li ul,.rst-content .toctree-wrapper ol.arabic li ul,.rst-content .toctree-wrapper ol li p:last-child,.rst-content .toctree-wrapper ol li ul,.rst-content section ol.arabic li ul,.rst-content section ol li p:last-child,.rst-content section ol li ul,.wy-plain-list-decimal li p:last-child,.wy-plain-list-decimal li ul,article ol li p:last-child,article ol li ul{margin-bottom:0}.rst-content .section ol.arabic li ul li,.rst-content .section ol li ul li,.rst-content .toctree-wrapper ol.arabic li ul li,.rst-content .toctree-wrapper ol li ul li,.rst-content section ol.arabic li ul li,.rst-content section ol li ul li,.wy-plain-list-decimal li ul li,article ol li ul li{list-style:disc}.wy-breadcrumbs{*zoom:1}.wy-breadcrumbs:after,.wy-breadcrumbs:before{display:table;content:""}.wy-breadcrumbs:after{clear:both}.wy-breadcrumbs>li{display:inline-block;padding-top:5px}.wy-breadcrumbs>li.wy-breadcrumbs-aside{float:right}.rst-content .wy-breadcrumbs>li code,.rst-content .wy-breadcrumbs>li tt,.wy-breadcrumbs>li .rst-content tt,.wy-breadcrumbs>li code{all:inherit;color:inherit}.breadcrumb-item:before{content:"/";color:#bbb;font-size:13px;padding:0 6px 0 3px}.wy-breadcrumbs-extra{margin-bottom:0;color:#b3b3b3;font-size:80%;display:inline-block}@media screen and (max-width:480px){.wy-breadcrumbs-extra,.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}@media print{.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}html{font-size:16px}.wy-affix{position:fixed;top:1.618em}.wy-menu a:hover{text-decoration:none}.wy-menu-horiz{*zoom:1}.wy-menu-horiz:after,.wy-menu-horiz:before{display:table;content:""}.wy-menu-horiz:after{clear:both}.wy-menu-horiz li,.wy-menu-horiz ul{display:inline-block}.wy-menu-horiz li:hover{background:hsla(0,0%,100%,.1)}.wy-menu-horiz li.divide-left{border-left:1px solid #404040}.wy-menu-horiz li.divide-right{border-right:1px solid #404040}.wy-menu-horiz a{height:32px;display:inline-block;line-height:32px;padding:0 16px}.wy-menu-vertical{width:300px}.wy-menu-vertical header,.wy-menu-vertical p.caption{color:#55a5d9;height:32px;line-height:32px;padding:0 1.618em;margin:12px 0 0;display:block;font-weight:700;text-transform:uppercase;font-size:85%;white-space:nowrap}.wy-menu-vertical ul{margin-bottom:0}.wy-menu-vertical li.divide-top{border-top:1px solid #404040}.wy-menu-vertical li.divide-bottom{border-bottom:1px solid #404040}.wy-menu-vertical li.current{background:#e3e3e3}.wy-menu-vertical li.current a{color:grey;border-right:1px solid #c9c9c9;padding:.4045em 2.427em}.wy-menu-vertical li.current a:hover{background:#d6d6d6}.rst-content .wy-menu-vertical li tt,.wy-menu-vertical li .rst-content tt,.wy-menu-vertical li code{border:none;background:inherit;color:inherit;padding-left:0;padding-right:0}.wy-menu-vertical li button.toctree-expand{display:block;float:left;margin-left:-1.2em;line-height:18px;color:#4d4d4d;border:none;background:none;padding:0}.wy-menu-vertical li.current>a,.wy-menu-vertical li.on a{color:#404040;font-weight:700;position:relative;background:#fcfcfc;border:none;padding:.4045em 1.618em}.wy-menu-vertical li.current>a:hover,.wy-menu-vertical li.on a:hover{background:#fcfcfc}.wy-menu-vertical li.current>a:hover button.toctree-expand,.wy-menu-vertical li.on a:hover button.toctree-expand{color:grey}.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand{display:block;line-height:18px;color:#333}.wy-menu-vertical li.toctree-l1.current>a{border-bottom:1px solid #c9c9c9;border-top:1px solid #c9c9c9}.wy-menu-vertical .toctree-l1.current .toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .toctree-l11>ul{display:none}.wy-menu-vertical .toctree-l1.current .current.toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .current.toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .current.toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .current.toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .current.toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .current.toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .current.toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .current.toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .current.toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .current.toctree-l11>ul{display:block}.wy-menu-vertical li.toctree-l3,.wy-menu-vertical li.toctree-l4{font-size:.9em}.wy-menu-vertical li.toctree-l2 a,.wy-menu-vertical li.toctree-l3 a,.wy-menu-vertical li.toctree-l4 a,.wy-menu-vertical li.toctree-l5 a,.wy-menu-vertical li.toctree-l6 a,.wy-menu-vertical li.toctree-l7 a,.wy-menu-vertical li.toctree-l8 a,.wy-menu-vertical li.toctree-l9 a,.wy-menu-vertical li.toctree-l10 a{color:#404040}.wy-menu-vertical li.toctree-l2 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l3 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l4 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l5 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l6 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l7 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l8 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l9 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l10 a:hover button.toctree-expand{color:grey}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a,.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a,.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a,.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a,.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a,.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a,.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a,.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{display:block}.wy-menu-vertical li.toctree-l2.current>a{padding:.4045em 2.427em}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{padding:.4045em 1.618em .4045em 4.045em}.wy-menu-vertical li.toctree-l3.current>a{padding:.4045em 4.045em}.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{padding:.4045em 1.618em .4045em 5.663em}.wy-menu-vertical li.toctree-l4.current>a{padding:.4045em 5.663em}.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a{padding:.4045em 1.618em .4045em 7.281em}.wy-menu-vertical li.toctree-l5.current>a{padding:.4045em 7.281em}.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a{padding:.4045em 1.618em .4045em 8.899em}.wy-menu-vertical li.toctree-l6.current>a{padding:.4045em 8.899em}.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a{padding:.4045em 1.618em .4045em 10.517em}.wy-menu-vertical li.toctree-l7.current>a{padding:.4045em 10.517em}.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a{padding:.4045em 1.618em .4045em 12.135em}.wy-menu-vertical li.toctree-l8.current>a{padding:.4045em 12.135em}.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a{padding:.4045em 1.618em .4045em 13.753em}.wy-menu-vertical li.toctree-l9.current>a{padding:.4045em 13.753em}.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a{padding:.4045em 1.618em .4045em 15.371em}.wy-menu-vertical li.toctree-l10.current>a{padding:.4045em 15.371em}.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{padding:.4045em 1.618em .4045em 16.989em}.wy-menu-vertical li.toctree-l2.current>a,.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{background:#c9c9c9}.wy-menu-vertical li.toctree-l2 button.toctree-expand{color:#a3a3a3}.wy-menu-vertical li.toctree-l3.current>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{background:#bdbdbd}.wy-menu-vertical li.toctree-l3 button.toctree-expand{color:#969696}.wy-menu-vertical li.current ul{display:block}.wy-menu-vertical li ul{margin-bottom:0;display:none}.wy-menu-vertical li ul li a{margin-bottom:0;color:#d9d9d9;font-weight:400}.wy-menu-vertical a{line-height:18px;padding:.4045em 1.618em;display:block;position:relative;font-size:90%;color:#d9d9d9}.wy-menu-vertical a:hover{background-color:#4e4a4a;cursor:pointer}.wy-menu-vertical a:hover button.toctree-expand{color:#d9d9d9}.wy-menu-vertical a:active{background-color:#2980b9;cursor:pointer;color:#fff}.wy-menu-vertical a:active button.toctree-expand{color:#fff}.wy-side-nav-search{display:block;width:300px;padding:.809em;margin-bottom:.809em;z-index:200;background-color:#2980b9;text-align:center;color:#fcfcfc}.wy-side-nav-search input[type=text]{width:100%;border-radius:50px;padding:6px 12px;border-color:#2472a4}.wy-side-nav-search img{display:block;margin:auto auto .809em;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-side-nav-search .wy-dropdown>a,.wy-side-nav-search>a{color:#fcfcfc;font-size:100%;font-weight:700;display:inline-block;padding:4px 6px;margin-bottom:.809em;max-width:100%}.wy-side-nav-search .wy-dropdown>a:hover,.wy-side-nav-search .wy-dropdown>aactive,.wy-side-nav-search .wy-dropdown>afocus,.wy-side-nav-search>a:hover,.wy-side-nav-search>aactive,.wy-side-nav-search>afocus{background:hsla(0,0%,100%,.1)}.wy-side-nav-search .wy-dropdown>a img.logo,.wy-side-nav-search>a img.logo{display:block;margin:0 auto;height:auto;width:auto;border-radius:0;max-width:100%;background:transparent}.wy-side-nav-search .wy-dropdown>a.icon,.wy-side-nav-search>a.icon{display:block}.wy-side-nav-search .wy-dropdown>a.icon img.logo,.wy-side-nav-search>a.icon img.logo{margin-top:.85em}.wy-side-nav-search>div.switch-menus{position:relative;display:block;margin-top:-.4045em;margin-bottom:.809em;font-weight:400;color:hsla(0,0%,100%,.3)}.wy-side-nav-search>div.switch-menus>div.language-switch,.wy-side-nav-search>div.switch-menus>div.version-switch{display:inline-block;padding:.2em}.wy-side-nav-search>div.switch-menus>div.language-switch select,.wy-side-nav-search>div.switch-menus>div.version-switch select{display:inline-block;margin-right:-2rem;padding-right:2rem;max-width:240px;text-align-last:center;background:none;border:none;border-radius:0;box-shadow:none;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;font-size:1em;font-weight:400;color:hsla(0,0%,100%,.3);cursor:pointer;appearance:none;-webkit-appearance:none;-moz-appearance:none}.wy-side-nav-search>div.switch-menus>div.language-switch select:active,.wy-side-nav-search>div.switch-menus>div.language-switch select:focus,.wy-side-nav-search>div.switch-menus>div.language-switch select:hover,.wy-side-nav-search>div.switch-menus>div.version-switch select:active,.wy-side-nav-search>div.switch-menus>div.version-switch select:focus,.wy-side-nav-search>div.switch-menus>div.version-switch select:hover{background:hsla(0,0%,100%,.1);color:hsla(0,0%,100%,.5)}.wy-side-nav-search>div.switch-menus>div.language-switch select option,.wy-side-nav-search>div.switch-menus>div.version-switch select option{color:#000}.wy-side-nav-search>div.switch-menus>div.language-switch:has(>select):after,.wy-side-nav-search>div.switch-menus>div.version-switch:has(>select):after{display:inline-block;width:1.5em;height:100%;padding:.1em;content:"\f0d7";font-size:1em;line-height:1.2em;font-family:FontAwesome;text-align:center;pointer-events:none;box-sizing:border-box}.wy-nav .wy-menu-vertical header{color:#2980b9}.wy-nav .wy-menu-vertical a{color:#b3b3b3}.wy-nav .wy-menu-vertical a:hover{background-color:#2980b9;color:#fff}[data-menu-wrap]{-webkit-transition:all .2s ease-in;-moz-transition:all .2s ease-in;transition:all .2s ease-in;position:absolute;opacity:1;width:100%;opacity:0}[data-menu-wrap].move-center{left:0;right:auto;opacity:1}[data-menu-wrap].move-left{right:auto;left:-100%;opacity:0}[data-menu-wrap].move-right{right:-100%;left:auto;opacity:0}.wy-body-for-nav{background:#fcfcfc}.wy-grid-for-nav{position:absolute;width:100%;height:100%}.wy-nav-side{position:fixed;top:0;bottom:0;left:0;padding-bottom:2em;width:300px;overflow-x:hidden;overflow-y:hidden;min-height:100%;color:#9b9b9b;background:#343131;z-index:200}.wy-side-scroll{width:320px;position:relative;overflow-x:hidden;overflow-y:scroll;height:100%}.wy-nav-top{display:none;background:#2980b9;color:#fff;padding:.4045em .809em;position:relative;line-height:50px;text-align:center;font-size:100%;*zoom:1}.wy-nav-top:after,.wy-nav-top:before{display:table;content:""}.wy-nav-top:after{clear:both}.wy-nav-top a{color:#fff;font-weight:700}.wy-nav-top img{margin-right:12px;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-nav-top i{font-size:30px;float:left;cursor:pointer;padding-top:inherit}.wy-nav-content-wrap{margin-left:300px;background:#fcfcfc;min-height:100%}.wy-nav-content{padding:1.618em 3.236em;height:100%;max-width:800px;margin:auto}.wy-body-mask{position:fixed;width:100%;height:100%;background:rgba(0,0,0,.2);display:none;z-index:499}.wy-body-mask.on{display:block}footer{color:grey}footer p{margin-bottom:12px}.rst-content footer span.commit tt,footer span.commit .rst-content tt,footer span.commit code{padding:0;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:1em;background:none;border:none;color:grey}.rst-footer-buttons{*zoom:1}.rst-footer-buttons:after,.rst-footer-buttons:before{width:100%;display:table;content:""}.rst-footer-buttons:after{clear:both}.rst-breadcrumbs-buttons{margin-top:12px;*zoom:1}.rst-breadcrumbs-buttons:after,.rst-breadcrumbs-buttons:before{display:table;content:""}.rst-breadcrumbs-buttons:after{clear:both}#search-results .search li{margin-bottom:24px;border-bottom:1px solid #e1e4e5;padding-bottom:24px}#search-results .search li:first-child{border-top:1px solid #e1e4e5;padding-top:24px}#search-results .search li a{font-size:120%;margin-bottom:12px;display:inline-block}#search-results .context{color:grey;font-size:90%}.genindextable li>ul{margin-left:24px}@media screen and (max-width:768px){.wy-body-for-nav{background:#fcfcfc}.wy-nav-top{display:block}.wy-nav-side{left:-300px}.wy-nav-side.shift{width:85%;left:0}.wy-menu.wy-menu-vertical,.wy-side-nav-search,.wy-side-scroll{width:auto}.wy-nav-content-wrap{margin-left:0}.wy-nav-content-wrap .wy-nav-content{padding:1.618em}.wy-nav-content-wrap.shift{position:fixed;min-width:100%;left:85%;top:0;height:100%;overflow:hidden}}@media screen and (min-width:1100px){.wy-nav-content-wrap{background:rgba(0,0,0,.05)}.wy-nav-content{margin:0;background:#fcfcfc}}@media print{.rst-versions,.wy-nav-side,footer{display:none}.wy-nav-content-wrap{margin-left:0}}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60;*zoom:1}.rst-versions .rst-current-version:after,.rst-versions .rst-current-version:before{display:table;content:""}.rst-versions .rst-current-version:after{clear:both}.rst-content .code-block-caption .rst-versions .rst-current-version .headerlink,.rst-content .eqno .rst-versions .rst-current-version .headerlink,.rst-content .rst-versions .rst-current-version .admonition-title,.rst-content code.download .rst-versions .rst-current-version span:first-child,.rst-content dl dt .rst-versions .rst-current-version .headerlink,.rst-content h1 .rst-versions .rst-current-version .headerlink,.rst-content h2 .rst-versions .rst-current-version .headerlink,.rst-content h3 .rst-versions .rst-current-version .headerlink,.rst-content h4 .rst-versions .rst-current-version .headerlink,.rst-content h5 .rst-versions .rst-current-version .headerlink,.rst-content h6 .rst-versions .rst-current-version .headerlink,.rst-content p .rst-versions .rst-current-version .headerlink,.rst-content table>caption .rst-versions .rst-current-version .headerlink,.rst-content tt.download .rst-versions .rst-current-version span:first-child,.rst-versions .rst-current-version .fa,.rst-versions .rst-current-version .icon,.rst-versions .rst-current-version .rst-content .admonition-title,.rst-versions .rst-current-version .rst-content .code-block-caption .headerlink,.rst-versions .rst-current-version .rst-content .eqno .headerlink,.rst-versions .rst-current-version .rst-content code.download span:first-child,.rst-versions .rst-current-version .rst-content dl dt .headerlink,.rst-versions .rst-current-version .rst-content h1 .headerlink,.rst-versions .rst-current-version .rst-content h2 .headerlink,.rst-versions .rst-current-version .rst-content h3 .headerlink,.rst-versions .rst-current-version .rst-content h4 .headerlink,.rst-versions .rst-current-version .rst-content h5 .headerlink,.rst-versions .rst-current-version .rst-content h6 .headerlink,.rst-versions .rst-current-version .rst-content p .headerlink,.rst-versions .rst-current-version .rst-content table>caption .headerlink,.rst-versions .rst-current-version .rst-content tt.download span:first-child,.rst-versions .rst-current-version .wy-menu-vertical li button.toctree-expand,.wy-menu-vertical li .rst-versions .rst-current-version button.toctree-expand{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions .rst-other-versions .rtd-current-item{font-weight:700}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}}#flyout-search-form{padding:6px}.rst-content .toctree-wrapper>p.caption,.rst-content h1,.rst-content h2,.rst-content h3,.rst-content h4,.rst-content h5,.rst-content h6{margin-bottom:24px}.rst-content img{max-width:100%;height:auto}.rst-content div.figure,.rst-content figure{margin-bottom:24px}.rst-content div.figure .caption-text,.rst-content figure .caption-text{font-style:italic}.rst-content div.figure p:last-child.caption,.rst-content figure p:last-child.caption{margin-bottom:0}.rst-content div.figure.align-center,.rst-content figure.align-center{text-align:center}.rst-content .section>a>img,.rst-content .section>img,.rst-content section>a>img,.rst-content section>img{margin-bottom:24px}.rst-content abbr[title]{text-decoration:none}.rst-content.style-external-links a.reference.external:after{font-family:FontAwesome;content:"\f08e";color:#b3b3b3;vertical-align:super;font-size:60%;margin:0 .2em}.rst-content blockquote{margin-left:24px;line-height:24px;margin-bottom:24px}.rst-content pre.literal-block{white-space:pre;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;display:block;overflow:auto}.rst-content div[class^=highlight],.rst-content pre.literal-block{border:1px solid #e1e4e5;overflow-x:auto;margin:1px 0 24px}.rst-content div[class^=highlight] div[class^=highlight],.rst-content pre.literal-block div[class^=highlight]{padding:0;border:none;margin:0}.rst-content div[class^=highlight] td.code{width:100%}.rst-content .linenodiv pre{border-right:1px solid #e6e9ea;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;user-select:none;pointer-events:none}.rst-content div[class^=highlight] pre{white-space:pre;margin:0;padding:12px;display:block;overflow:auto}.rst-content div[class^=highlight] pre .hll{display:block;margin:0 -12px;padding:0 12px}.rst-content .linenodiv pre,.rst-content div[class^=highlight] pre,.rst-content pre.literal-block{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:12px;line-height:1.4}.rst-content div.highlight .gp,.rst-content div.highlight span.linenos{user-select:none;pointer-events:none}.rst-content div.highlight span.linenos{display:inline-block;padding-left:0;padding-right:12px;margin-right:12px;border-right:1px solid #e6e9ea}.rst-content .code-block-caption{font-style:italic;font-size:85%;line-height:1;padding:1em 0;text-align:center}@media print{.rst-content .codeblock,.rst-content div[class^=highlight],.rst-content div[class^=highlight] pre{white-space:pre-wrap}}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning{clear:both}.rst-content .admonition-todo .last,.rst-content .admonition-todo>:last-child,.rst-content .admonition .last,.rst-content .admonition>:last-child,.rst-content .attention .last,.rst-content .attention>:last-child,.rst-content .caution .last,.rst-content .caution>:last-child,.rst-content .danger .last,.rst-content .danger>:last-child,.rst-content .error .last,.rst-content .error>:last-child,.rst-content .hint .last,.rst-content .hint>:last-child,.rst-content .important .last,.rst-content .important>:last-child,.rst-content .note .last,.rst-content .note>:last-child,.rst-content .seealso .last,.rst-content .seealso>:last-child,.rst-content .tip .last,.rst-content .tip>:last-child,.rst-content .warning .last,.rst-content .warning>:last-child{margin-bottom:0}.rst-content .admonition-title:before{margin-right:4px}.rst-content .admonition table{border-color:rgba(0,0,0,.1)}.rst-content .admonition table td,.rst-content .admonition table th{background:transparent!important;border-color:rgba(0,0,0,.1)!important}.rst-content .section ol.loweralpha,.rst-content .section ol.loweralpha>li,.rst-content .toctree-wrapper ol.loweralpha,.rst-content .toctree-wrapper ol.loweralpha>li,.rst-content section ol.loweralpha,.rst-content section ol.loweralpha>li{list-style:lower-alpha}.rst-content .section ol.upperalpha,.rst-content .section ol.upperalpha>li,.rst-content .toctree-wrapper ol.upperalpha,.rst-content .toctree-wrapper ol.upperalpha>li,.rst-content section ol.upperalpha,.rst-content section ol.upperalpha>li{list-style:upper-alpha}.rst-content .section ol li>*,.rst-content .section ul li>*,.rst-content .toctree-wrapper ol li>*,.rst-content .toctree-wrapper ul li>*,.rst-content section ol li>*,.rst-content section ul li>*{margin-top:12px;margin-bottom:12px}.rst-content .section ol li>:first-child,.rst-content .section ul li>:first-child,.rst-content .toctree-wrapper ol li>:first-child,.rst-content .toctree-wrapper ul li>:first-child,.rst-content section ol li>:first-child,.rst-content section ul li>:first-child{margin-top:0}.rst-content .section ol li>p,.rst-content .section ol li>p:last-child,.rst-content .section ul li>p,.rst-content .section ul li>p:last-child,.rst-content .toctree-wrapper ol li>p,.rst-content .toctree-wrapper ol li>p:last-child,.rst-content .toctree-wrapper ul li>p,.rst-content .toctree-wrapper ul li>p:last-child,.rst-content section ol li>p,.rst-content section ol li>p:last-child,.rst-content section ul li>p,.rst-content section ul li>p:last-child{margin-bottom:12px}.rst-content .section ol li>p:only-child,.rst-content .section ol li>p:only-child:last-child,.rst-content .section ul li>p:only-child,.rst-content .section ul li>p:only-child:last-child,.rst-content .toctree-wrapper ol li>p:only-child,.rst-content .toctree-wrapper ol li>p:only-child:last-child,.rst-content .toctree-wrapper ul li>p:only-child,.rst-content .toctree-wrapper ul li>p:only-child:last-child,.rst-content section ol li>p:only-child,.rst-content section ol li>p:only-child:last-child,.rst-content section ul li>p:only-child,.rst-content section ul li>p:only-child:last-child{margin-bottom:0}.rst-content .section ol li>ol,.rst-content .section ol li>ul,.rst-content .section ul li>ol,.rst-content .section ul li>ul,.rst-content .toctree-wrapper ol li>ol,.rst-content .toctree-wrapper ol li>ul,.rst-content .toctree-wrapper ul li>ol,.rst-content .toctree-wrapper ul li>ul,.rst-content section ol li>ol,.rst-content section ol li>ul,.rst-content section ul li>ol,.rst-content section ul li>ul{margin-bottom:12px}.rst-content .section ol.simple li>*,.rst-content .section ol.simple li ol,.rst-content .section ol.simple li ul,.rst-content .section ul.simple li>*,.rst-content .section ul.simple li ol,.rst-content .section ul.simple li ul,.rst-content .toctree-wrapper ol.simple li>*,.rst-content .toctree-wrapper ol.simple li ol,.rst-content .toctree-wrapper ol.simple li ul,.rst-content .toctree-wrapper ul.simple li>*,.rst-content .toctree-wrapper ul.simple li ol,.rst-content .toctree-wrapper ul.simple li ul,.rst-content section ol.simple li>*,.rst-content section ol.simple li ol,.rst-content section ol.simple li ul,.rst-content section ul.simple li>*,.rst-content section ul.simple li ol,.rst-content section ul.simple li ul{margin-top:0;margin-bottom:0}.rst-content .line-block{margin-left:0;margin-bottom:24px;line-height:24px}.rst-content .line-block .line-block{margin-left:24px;margin-bottom:0}.rst-content .topic-title{font-weight:700;margin-bottom:12px}.rst-content .toc-backref{color:#404040}.rst-content .align-right{float:right;margin:0 0 24px 24px}.rst-content .align-left{float:left;margin:0 24px 24px 0}.rst-content .align-center{margin:auto}.rst-content .align-center:not(table){display:block}.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink{opacity:0;font-size:14px;font-family:FontAwesome;margin-left:.5em}.rst-content .code-block-caption .headerlink:focus,.rst-content .code-block-caption:hover .headerlink,.rst-content .eqno .headerlink:focus,.rst-content .eqno:hover .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink:focus,.rst-content .toctree-wrapper>p.caption:hover .headerlink,.rst-content dl dt .headerlink:focus,.rst-content dl dt:hover .headerlink,.rst-content h1 .headerlink:focus,.rst-content h1:hover .headerlink,.rst-content h2 .headerlink:focus,.rst-content h2:hover .headerlink,.rst-content h3 .headerlink:focus,.rst-content h3:hover .headerlink,.rst-content h4 .headerlink:focus,.rst-content h4:hover .headerlink,.rst-content h5 .headerlink:focus,.rst-content h5:hover .headerlink,.rst-content h6 .headerlink:focus,.rst-content h6:hover .headerlink,.rst-content p.caption .headerlink:focus,.rst-content p.caption:hover .headerlink,.rst-content p .headerlink:focus,.rst-content p:hover .headerlink,.rst-content table>caption .headerlink:focus,.rst-content table>caption:hover .headerlink{opacity:1}.rst-content p a{overflow-wrap:anywhere}.rst-content .wy-table td p,.rst-content .wy-table td ul,.rst-content .wy-table th p,.rst-content .wy-table th ul,.rst-content table.docutils td p,.rst-content table.docutils td ul,.rst-content table.docutils th p,.rst-content table.docutils th ul,.rst-content table.field-list td p,.rst-content table.field-list td ul,.rst-content table.field-list th p,.rst-content table.field-list th ul{font-size:inherit}.rst-content .btn:focus{outline:2px solid}.rst-content table>caption .headerlink:after{font-size:12px}.rst-content .centered{text-align:center}.rst-content .sidebar{float:right;width:40%;display:block;margin:0 0 24px 24px;padding:24px;background:#f3f6f6;border:1px solid #e1e4e5}.rst-content .sidebar dl,.rst-content .sidebar p,.rst-content .sidebar ul{font-size:90%}.rst-content .sidebar .last,.rst-content .sidebar>:last-child{margin-bottom:0}.rst-content .sidebar .sidebar-title{display:block;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif;font-weight:700;background:#e1e4e5;padding:6px 12px;margin:-24px -24px 24px;font-size:100%}.rst-content .highlighted{background:#f1c40f;box-shadow:0 0 0 2px #f1c40f;display:inline;font-weight:700}.rst-content .citation-reference,.rst-content .footnote-reference{vertical-align:baseline;position:relative;top:-.4em;line-height:0;font-size:90%}.rst-content .citation-reference>span.fn-bracket,.rst-content .footnote-reference>span.fn-bracket{display:none}.rst-content .hlist{width:100%}.rst-content dl dt span.classifier:before{content:" : "}.rst-content dl dt span.classifier-delimiter{display:none!important}html.writer-html4 .rst-content table.docutils.citation,html.writer-html4 .rst-content table.docutils.footnote{background:none;border:none}html.writer-html4 .rst-content table.docutils.citation td,html.writer-html4 .rst-content table.docutils.citation tr,html.writer-html4 .rst-content table.docutils.footnote td,html.writer-html4 .rst-content table.docutils.footnote tr{border:none;background-color:transparent!important;white-space:normal}html.writer-html4 .rst-content table.docutils.citation td.label,html.writer-html4 .rst-content table.docutils.footnote td.label{padding-left:0;padding-right:0;vertical-align:top}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.field-list,html.writer-html5 .rst-content dl.footnote{display:grid;grid-template-columns:auto minmax(80%,95%)}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dt{display:inline-grid;grid-template-columns:max-content auto}html.writer-html5 .rst-content aside.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content div.citation{display:grid;grid-template-columns:auto auto minmax(.65rem,auto) minmax(40%,95%)}html.writer-html5 .rst-content aside.citation>span.label,html.writer-html5 .rst-content aside.footnote>span.label,html.writer-html5 .rst-content div.citation>span.label{grid-column-start:1;grid-column-end:2}html.writer-html5 .rst-content aside.citation>span.backrefs,html.writer-html5 .rst-content aside.footnote>span.backrefs,html.writer-html5 .rst-content div.citation>span.backrefs{grid-column-start:2;grid-column-end:3;grid-row-start:1;grid-row-end:3}html.writer-html5 .rst-content aside.citation>p,html.writer-html5 .rst-content aside.footnote>p,html.writer-html5 .rst-content div.citation>p{grid-column-start:4;grid-column-end:5}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.field-list,html.writer-html5 .rst-content dl.footnote{margin-bottom:24px}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dt{padding-left:1rem}html.writer-html5 .rst-content dl.citation>dd,html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dd,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dd,html.writer-html5 .rst-content dl.footnote>dt{margin-bottom:0}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.footnote{font-size:.9rem}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.footnote>dt{margin:0 .5rem .5rem 0;line-height:1.2rem;word-break:break-all;font-weight:400}html.writer-html5 .rst-content dl.citation>dt>span.brackets:before,html.writer-html5 .rst-content dl.footnote>dt>span.brackets:before{content:"["}html.writer-html5 .rst-content dl.citation>dt>span.brackets:after,html.writer-html5 .rst-content dl.footnote>dt>span.brackets:after{content:"]"}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref{text-align:left;font-style:italic;margin-left:.65rem;word-break:break-word;word-spacing:-.1rem;max-width:5rem}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref>a,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref>a{word-break:keep-all}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref>a:not(:first-child):before,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref>a:not(:first-child):before{content:" "}html.writer-html5 .rst-content dl.citation>dd,html.writer-html5 .rst-content dl.footnote>dd{margin:0 0 .5rem;line-height:1.2rem}html.writer-html5 .rst-content dl.citation>dd p,html.writer-html5 .rst-content dl.footnote>dd p{font-size:.9rem}html.writer-html5 .rst-content aside.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content div.citation{padding-left:1rem;padding-right:1rem;font-size:.9rem;line-height:1.2rem}html.writer-html5 .rst-content aside.citation p,html.writer-html5 .rst-content aside.footnote p,html.writer-html5 .rst-content div.citation p{font-size:.9rem;line-height:1.2rem;margin-bottom:12px}html.writer-html5 .rst-content aside.citation span.backrefs,html.writer-html5 .rst-content aside.footnote span.backrefs,html.writer-html5 .rst-content div.citation span.backrefs{text-align:left;font-style:italic;margin-left:.65rem;word-break:break-word;word-spacing:-.1rem;max-width:5rem}html.writer-html5 .rst-content aside.citation span.backrefs>a,html.writer-html5 .rst-content aside.footnote span.backrefs>a,html.writer-html5 .rst-content div.citation span.backrefs>a{word-break:keep-all}html.writer-html5 .rst-content aside.citation span.backrefs>a:not(:first-child):before,html.writer-html5 .rst-content aside.footnote span.backrefs>a:not(:first-child):before,html.writer-html5 .rst-content div.citation span.backrefs>a:not(:first-child):before{content:" "}html.writer-html5 .rst-content aside.citation span.label,html.writer-html5 .rst-content aside.footnote span.label,html.writer-html5 .rst-content div.citation span.label{line-height:1.2rem}html.writer-html5 .rst-content aside.citation-list,html.writer-html5 .rst-content aside.footnote-list,html.writer-html5 .rst-content div.citation-list{margin-bottom:24px}html.writer-html5 .rst-content dl.option-list kbd{font-size:.9rem}.rst-content table.docutils.footnote,html.writer-html4 .rst-content table.docutils.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content aside.footnote-list aside.footnote,html.writer-html5 .rst-content div.citation-list>div.citation,html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.footnote{color:grey}.rst-content table.docutils.footnote code,.rst-content table.docutils.footnote tt,html.writer-html4 .rst-content table.docutils.citation code,html.writer-html4 .rst-content table.docutils.citation tt,html.writer-html5 .rst-content aside.footnote-list aside.footnote code,html.writer-html5 .rst-content aside.footnote-list aside.footnote tt,html.writer-html5 .rst-content aside.footnote code,html.writer-html5 .rst-content aside.footnote tt,html.writer-html5 .rst-content div.citation-list>div.citation code,html.writer-html5 .rst-content div.citation-list>div.citation tt,html.writer-html5 .rst-content dl.citation code,html.writer-html5 .rst-content dl.citation tt,html.writer-html5 .rst-content dl.footnote code,html.writer-html5 .rst-content dl.footnote tt{color:#555}.rst-content .wy-table-responsive.citation,.rst-content .wy-table-responsive.footnote{margin-bottom:0}.rst-content .wy-table-responsive.citation+:not(.citation),.rst-content .wy-table-responsive.footnote+:not(.footnote){margin-top:24px}.rst-content .wy-table-responsive.citation:last-child,.rst-content .wy-table-responsive.footnote:last-child{margin-bottom:24px}.rst-content table.docutils th{border-color:#e1e4e5}html.writer-html5 .rst-content table.docutils th{border:1px solid #e1e4e5}html.writer-html5 .rst-content table.docutils td>p,html.writer-html5 .rst-content table.docutils th>p{line-height:1rem;margin-bottom:0;font-size:.9rem}.rst-content table.docutils td .last,.rst-content table.docutils td .last>:last-child{margin-bottom:0}.rst-content table.field-list,.rst-content table.field-list td{border:none}.rst-content table.field-list td p{line-height:inherit}.rst-content table.field-list td>strong{display:inline-block}.rst-content table.field-list .field-name{padding-right:10px;text-align:left;white-space:nowrap}.rst-content table.field-list .field-body{text-align:left}.rst-content code,.rst-content tt{color:#000;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;padding:2px 5px}.rst-content code big,.rst-content code em,.rst-content tt big,.rst-content tt em{font-size:100%!important;line-height:normal}.rst-content code.literal,.rst-content tt.literal{color:#e74c3c;white-space:normal}.rst-content code.xref,.rst-content tt.xref,a .rst-content code,a .rst-content tt{font-weight:700;color:#404040;overflow-wrap:normal}.rst-content kbd,.rst-content pre,.rst-content samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace}.rst-content a code,.rst-content a tt{color:#2980b9}.rst-content dl{margin-bottom:24px}.rst-content dl dt{font-weight:700;margin-bottom:12px}.rst-content dl ol,.rst-content dl p,.rst-content dl table,.rst-content dl ul{margin-bottom:12px}.rst-content dl dd{margin:0 0 12px 24px;line-height:24px}.rst-content dl dd>ol:last-child,.rst-content dl dd>p:last-child,.rst-content dl dd>table:last-child,.rst-content dl dd>ul:last-child{margin-bottom:0}html.writer-html4 .rst-content dl:not(.docutils),html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple){margin-bottom:24px}html.writer-html4 .rst-content dl:not(.docutils)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt{display:table;margin:6px 0;font-size:90%;line-height:normal;background:#e7f2fa;color:#2980b9;border-top:3px solid #6ab0de;padding:6px;position:relative}html.writer-html4 .rst-content dl:not(.docutils)>dt:before,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt:before{color:#6ab0de}html.writer-html4 .rst-content dl:not(.docutils)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt{margin-bottom:6px;border:none;border-left:3px solid #ccc;background:#f0f0f0;color:#555}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils)>dt:first-child,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt:first-child{margin-top:0}html.writer-html4 .rst-content dl:not(.docutils) code.descclassname,html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descclassname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descname{background-color:transparent;border:none;padding:0;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descname{font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .optional,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .optional{display:inline-block;padding:0 4px;color:#000;font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .property,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .property{display:inline-block;padding-right:8px;max-width:100%}html.writer-html4 .rst-content dl:not(.docutils) .k,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .k{font-style:italic}html.writer-html4 .rst-content dl:not(.docutils) .descclassname,html.writer-html4 .rst-content dl:not(.docutils) .descname,html.writer-html4 .rst-content dl:not(.docutils) .sig-name,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .sig-name{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#000}.rst-content .viewcode-back,.rst-content .viewcode-link{display:inline-block;color:#27ae60;font-size:80%;padding-left:24px}.rst-content .viewcode-back{display:block;float:right}.rst-content p.rubric{margin-bottom:12px;font-weight:700}.rst-content code.download,.rst-content tt.download{background:inherit;padding:inherit;font-weight:400;font-family:inherit;font-size:inherit;color:inherit;border:inherit;white-space:inherit}.rst-content code.download span:first-child,.rst-content tt.download span:first-child{-webkit-font-smoothing:subpixel-antialiased}.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{margin-right:4px}.rst-content .guilabel,.rst-content .menuselection{font-size:80%;font-weight:700;border-radius:4px;padding:2.4px 6px;margin:auto 2px}.rst-content .guilabel,.rst-content .menuselection{border:1px solid #7fbbe3;background:#e7f2fa}.rst-content :not(dl.option-list)>:not(dt):not(kbd):not(.kbd)>.kbd,.rst-content :not(dl.option-list)>:not(dt):not(kbd):not(.kbd)>kbd{color:inherit;font-size:80%;background-color:#fff;border:1px solid #a6a6a6;border-radius:4px;box-shadow:0 2px grey;padding:2.4px 6px;margin:auto 0}.rst-content .versionmodified{font-style:italic}@media screen and (max-width:480px){.rst-content .sidebar{width:100%}}span[id*=MathJax-Span]{color:#404040}.math{text-align:center}@font-face{font-family:Lato;src:url(fonts/lato-normal.woff2?bd03a2cc277bbbc338d464e679fe9942) format("woff2"),url(fonts/lato-normal.woff?27bd77b9162d388cb8d4c4217c7c5e2a) format("woff");font-weight:400;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold.woff2?cccb897485813c7c256901dbca54ecf2) format("woff2"),url(fonts/lato-bold.woff?d878b6c29b10beca227e9eef4246111b) format("woff");font-weight:700;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold-italic.woff2?0b6bb6725576b072c5d0b02ecdd1900d) format("woff2"),url(fonts/lato-bold-italic.woff?9c7e4e9eb485b4a121c760e61bc3707c) format("woff");font-weight:700;font-style:italic;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-normal-italic.woff2?4eb103b4d12be57cb1d040ed5e162e9d) format("woff2"),url(fonts/lato-normal-italic.woff?f28f2d6482446544ef1ea1ccc6dd5892) format("woff");font-weight:400;font-style:italic;font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:400;src:url(fonts/Roboto-Slab-Regular.woff2?7abf5b8d04d26a2cafea937019bca958) format("woff2"),url(fonts/Roboto-Slab-Regular.woff?c1be9284088d487c5e3ff0a10a92e58c) format("woff");font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:700;src:url(fonts/Roboto-Slab-Bold.woff2?9984f4a9bda09be08e83f2506954adbe) format("woff2"),url(fonts/Roboto-Slab-Bold.woff?bed5564a116b05148e3b3bea6fb1162a) format("woff");font-display:block} \ No newline at end of file diff --git a/docs/build/html/_static/doctools.js b/docs/build/html/_static/doctools.js index d06a71d..0398ebb 100644 --- a/docs/build/html/_static/doctools.js +++ b/docs/build/html/_static/doctools.js @@ -1,12 +1,5 @@ /* - * doctools.js - * ~~~~~~~~~~~ - * * Base JavaScript utilities for all Sphinx HTML documentation. - * - * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. - * :license: BSD, see LICENSE for details. - * */ "use strict"; diff --git a/docs/build/html/_static/documentation_options.js b/docs/build/html/_static/documentation_options.js index 72ca8b0..ed97cc3 100644 --- a/docs/build/html/_static/documentation_options.js +++ b/docs/build/html/_static/documentation_options.js @@ -1,5 +1,5 @@ const DOCUMENTATION_OPTIONS = { - VERSION: '1.5.4', + VERSION: '1.6', LANGUAGE: 'en', COLLAPSE_INDEX: false, BUILDER: 'html', diff --git a/docs/build/html/_static/js/versions.js b/docs/build/html/_static/js/versions.js new file mode 100644 index 0000000..4958195 --- /dev/null +++ b/docs/build/html/_static/js/versions.js @@ -0,0 +1,228 @@ +const themeFlyoutDisplay = "hidden"; +const themeVersionSelector = true; +const themeLanguageSelector = true; + +if (themeFlyoutDisplay === "attached") { + function renderLanguages(config) { + if (!config.projects.translations.length) { + return ""; + } + + // Insert the current language to the options on the selector + let languages = config.projects.translations.concat(config.projects.current); + languages = languages.sort((a, b) => a.language.name.localeCompare(b.language.name)); + + const languagesHTML = ` +
+
Languages
+ ${languages + .map( + (translation) => ` +
+ ${translation.language.code} +
+ `, + ) + .join("\n")} +
+ `; + return languagesHTML; + } + + function renderVersions(config) { + if (!config.versions.active.length) { + return ""; + } + const versionsHTML = ` +
+
Versions
+ ${config.versions.active + .map( + (version) => ` +
+ ${version.slug} +
+ `, + ) + .join("\n")} +
+ `; + return versionsHTML; + } + + function renderDownloads(config) { + if (!Object.keys(config.versions.current.downloads).length) { + return ""; + } + const downloadsNameDisplay = { + pdf: "PDF", + epub: "Epub", + htmlzip: "HTML", + }; + + const downloadsHTML = ` +
+
Downloads
+ ${Object.entries(config.versions.current.downloads) + .map( + ([name, url]) => ` +
+ ${downloadsNameDisplay[name]} +
+ `, + ) + .join("\n")} +
+ `; + return downloadsHTML; + } + + document.addEventListener("readthedocs-addons-data-ready", function (event) { + const config = event.detail.data(); + + const flyout = ` +
+ + Read the Docs + v: ${config.versions.current.slug} + + +
+
+ ${renderLanguages(config)} + ${renderVersions(config)} + ${renderDownloads(config)} +
+
On Read the Docs
+
+ Project Home +
+
+ Builds +
+
+ Downloads +
+
+
+
Search
+
+
+ +
+
+
+
+ + Hosted by Read the Docs + +
+
+ `; + + // Inject the generated flyout into the body HTML element. + document.body.insertAdjacentHTML("beforeend", flyout); + + // Trigger the Read the Docs Addons Search modal when clicking on the "Search docs" input from inside the flyout. + document + .querySelector("#flyout-search-form") + .addEventListener("focusin", () => { + const event = new CustomEvent("readthedocs-search-show"); + document.dispatchEvent(event); + }); + }) +} + +if (themeLanguageSelector || themeVersionSelector) { + function onSelectorSwitch(event) { + const option = event.target.selectedIndex; + const item = event.target.options[option]; + window.location.href = item.dataset.url; + } + + document.addEventListener("readthedocs-addons-data-ready", function (event) { + const config = event.detail.data(); + + const versionSwitch = document.querySelector( + "div.switch-menus > div.version-switch", + ); + if (themeVersionSelector) { + let versions = config.versions.active; + if (config.versions.current.hidden || config.versions.current.type === "external") { + versions.unshift(config.versions.current); + } + const versionSelect = ` + + `; + + versionSwitch.innerHTML = versionSelect; + versionSwitch.firstElementChild.addEventListener("change", onSelectorSwitch); + } + + const languageSwitch = document.querySelector( + "div.switch-menus > div.language-switch", + ); + + if (themeLanguageSelector) { + if (config.projects.translations.length) { + // Add the current language to the options on the selector + let languages = config.projects.translations.concat( + config.projects.current, + ); + languages = languages.sort((a, b) => + a.language.name.localeCompare(b.language.name), + ); + + const languageSelect = ` + + `; + + languageSwitch.innerHTML = languageSelect; + languageSwitch.firstElementChild.addEventListener("change", onSelectorSwitch); + } + else { + languageSwitch.remove(); + } + } + }); +} + +document.addEventListener("readthedocs-addons-data-ready", function (event) { + // Trigger the Read the Docs Addons Search modal when clicking on "Search docs" input from the topnav. + document + .querySelector("[role='search'] input") + .addEventListener("focusin", () => { + const event = new CustomEvent("readthedocs-search-show"); + document.dispatchEvent(event); + }); +}); \ No newline at end of file diff --git a/docs/build/html/_static/language_data.js b/docs/build/html/_static/language_data.js index 250f566..c7fe6c6 100644 --- a/docs/build/html/_static/language_data.js +++ b/docs/build/html/_static/language_data.js @@ -1,19 +1,12 @@ /* - * language_data.js - * ~~~~~~~~~~~~~~~~ - * * This script contains the language-specific data used by searchtools.js, * namely the list of stopwords, stemmer, scorer and splitter. - * - * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. - * :license: BSD, see LICENSE for details. - * */ var stopwords = ["a", "and", "are", "as", "at", "be", "but", "by", "for", "if", "in", "into", "is", "it", "near", "no", "not", "of", "on", "or", "such", "that", "the", "their", "then", "there", "these", "they", "this", "to", "was", "will", "with"]; -/* Non-minified version is copied as a separate JS file, is available */ +/* Non-minified version is copied as a separate JS file, if available */ /** * Porter Stemmer diff --git a/docs/build/html/_static/pygments.css b/docs/build/html/_static/pygments.css index 0d49244..5f2b0a2 100644 --- a/docs/build/html/_static/pygments.css +++ b/docs/build/html/_static/pygments.css @@ -6,26 +6,26 @@ span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: .highlight .hll { background-color: #ffffcc } .highlight { background: #eeffcc; } .highlight .c { color: #408090; font-style: italic } /* Comment */ -.highlight .err { border: 1px solid #FF0000 } /* Error */ +.highlight .err { border: 1px solid #F00 } /* Error */ .highlight .k { color: #007020; font-weight: bold } /* Keyword */ -.highlight .o { color: #666666 } /* Operator */ +.highlight .o { color: #666 } /* Operator */ .highlight .ch { color: #408090; font-style: italic } /* Comment.Hashbang */ .highlight .cm { color: #408090; font-style: italic } /* Comment.Multiline */ .highlight .cp { color: #007020 } /* Comment.Preproc */ .highlight .cpf { color: #408090; font-style: italic } /* Comment.PreprocFile */ .highlight .c1 { color: #408090; font-style: italic } /* Comment.Single */ -.highlight .cs { color: #408090; background-color: #fff0f0 } /* Comment.Special */ +.highlight .cs { color: #408090; background-color: #FFF0F0 } /* Comment.Special */ .highlight .gd { color: #A00000 } /* Generic.Deleted */ .highlight .ge { font-style: italic } /* Generic.Emph */ .highlight .ges { font-weight: bold; font-style: italic } /* Generic.EmphStrong */ -.highlight .gr { color: #FF0000 } /* Generic.Error */ +.highlight .gr { color: #F00 } /* Generic.Error */ .highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ .highlight .gi { color: #00A000 } /* Generic.Inserted */ -.highlight .go { color: #333333 } /* Generic.Output */ -.highlight .gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */ +.highlight .go { color: #333 } /* Generic.Output */ +.highlight .gp { color: #C65D09; font-weight: bold } /* Generic.Prompt */ .highlight .gs { font-weight: bold } /* Generic.Strong */ .highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ -.highlight .gt { color: #0044DD } /* Generic.Traceback */ +.highlight .gt { color: #04D } /* Generic.Traceback */ .highlight .kc { color: #007020; font-weight: bold } /* Keyword.Constant */ .highlight .kd { color: #007020; font-weight: bold } /* Keyword.Declaration */ .highlight .kn { color: #007020; font-weight: bold } /* Keyword.Namespace */ @@ -33,43 +33,43 @@ span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: .highlight .kr { color: #007020; font-weight: bold } /* Keyword.Reserved */ .highlight .kt { color: #902000 } /* Keyword.Type */ .highlight .m { color: #208050 } /* Literal.Number */ -.highlight .s { color: #4070a0 } /* Literal.String */ -.highlight .na { color: #4070a0 } /* Name.Attribute */ +.highlight .s { color: #4070A0 } /* Literal.String */ +.highlight .na { color: #4070A0 } /* Name.Attribute */ .highlight .nb { color: #007020 } /* Name.Builtin */ -.highlight .nc { color: #0e84b5; font-weight: bold } /* Name.Class */ -.highlight .no { color: #60add5 } /* Name.Constant */ -.highlight .nd { color: #555555; font-weight: bold } /* Name.Decorator */ -.highlight .ni { color: #d55537; font-weight: bold } /* Name.Entity */ +.highlight .nc { color: #0E84B5; font-weight: bold } /* Name.Class */ +.highlight .no { color: #60ADD5 } /* Name.Constant */ +.highlight .nd { color: #555; font-weight: bold } /* Name.Decorator */ +.highlight .ni { color: #D55537; font-weight: bold } /* Name.Entity */ .highlight .ne { color: #007020 } /* Name.Exception */ -.highlight .nf { color: #06287e } /* Name.Function */ +.highlight .nf { color: #06287E } /* Name.Function */ .highlight .nl { color: #002070; font-weight: bold } /* Name.Label */ -.highlight .nn { color: #0e84b5; font-weight: bold } /* Name.Namespace */ +.highlight .nn { color: #0E84B5; font-weight: bold } /* Name.Namespace */ .highlight .nt { color: #062873; font-weight: bold } /* Name.Tag */ -.highlight .nv { color: #bb60d5 } /* Name.Variable */ +.highlight .nv { color: #BB60D5 } /* Name.Variable */ .highlight .ow { color: #007020; font-weight: bold } /* Operator.Word */ -.highlight .w { color: #bbbbbb } /* Text.Whitespace */ +.highlight .w { color: #BBB } /* Text.Whitespace */ .highlight .mb { color: #208050 } /* Literal.Number.Bin */ .highlight .mf { color: #208050 } /* Literal.Number.Float */ .highlight .mh { color: #208050 } /* Literal.Number.Hex */ .highlight .mi { color: #208050 } /* Literal.Number.Integer */ .highlight .mo { color: #208050 } /* Literal.Number.Oct */ -.highlight .sa { color: #4070a0 } /* Literal.String.Affix */ -.highlight .sb { color: #4070a0 } /* Literal.String.Backtick */ -.highlight .sc { color: #4070a0 } /* Literal.String.Char */ -.highlight .dl { color: #4070a0 } /* Literal.String.Delimiter */ -.highlight .sd { color: #4070a0; font-style: italic } /* Literal.String.Doc */ -.highlight .s2 { color: #4070a0 } /* Literal.String.Double */ -.highlight .se { color: #4070a0; font-weight: bold } /* Literal.String.Escape */ -.highlight .sh { color: #4070a0 } /* Literal.String.Heredoc */ -.highlight .si { color: #70a0d0; font-style: italic } /* Literal.String.Interpol */ -.highlight .sx { color: #c65d09 } /* Literal.String.Other */ +.highlight .sa { color: #4070A0 } /* Literal.String.Affix */ +.highlight .sb { color: #4070A0 } /* Literal.String.Backtick */ +.highlight .sc { color: #4070A0 } /* Literal.String.Char */ +.highlight .dl { color: #4070A0 } /* Literal.String.Delimiter */ +.highlight .sd { color: #4070A0; font-style: italic } /* Literal.String.Doc */ +.highlight .s2 { color: #4070A0 } /* Literal.String.Double */ +.highlight .se { color: #4070A0; font-weight: bold } /* Literal.String.Escape */ +.highlight .sh { color: #4070A0 } /* Literal.String.Heredoc */ +.highlight .si { color: #70A0D0; font-style: italic } /* Literal.String.Interpol */ +.highlight .sx { color: #C65D09 } /* Literal.String.Other */ .highlight .sr { color: #235388 } /* Literal.String.Regex */ -.highlight .s1 { color: #4070a0 } /* Literal.String.Single */ +.highlight .s1 { color: #4070A0 } /* Literal.String.Single */ .highlight .ss { color: #517918 } /* Literal.String.Symbol */ .highlight .bp { color: #007020 } /* Name.Builtin.Pseudo */ -.highlight .fm { color: #06287e } /* Name.Function.Magic */ -.highlight .vc { color: #bb60d5 } /* Name.Variable.Class */ -.highlight .vg { color: #bb60d5 } /* Name.Variable.Global */ -.highlight .vi { color: #bb60d5 } /* Name.Variable.Instance */ -.highlight .vm { color: #bb60d5 } /* Name.Variable.Magic */ +.highlight .fm { color: #06287E } /* Name.Function.Magic */ +.highlight .vc { color: #BB60D5 } /* Name.Variable.Class */ +.highlight .vg { color: #BB60D5 } /* Name.Variable.Global */ +.highlight .vi { color: #BB60D5 } /* Name.Variable.Instance */ +.highlight .vm { color: #BB60D5 } /* Name.Variable.Magic */ .highlight .il { color: #208050 } /* Literal.Number.Integer.Long */ \ No newline at end of file diff --git a/docs/build/html/_static/searchtools.js b/docs/build/html/_static/searchtools.js index 7918c3f..91f4be5 100644 --- a/docs/build/html/_static/searchtools.js +++ b/docs/build/html/_static/searchtools.js @@ -1,12 +1,5 @@ /* - * searchtools.js - * ~~~~~~~~~~~~~~~~ - * * Sphinx JavaScript utilities for the full-text search. - * - * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. - * :license: BSD, see LICENSE for details. - * */ "use strict"; @@ -20,7 +13,7 @@ if (typeof Scorer === "undefined") { // and returns the new score. /* score: result => { - const [docname, title, anchor, descr, score, filename] = result + const [docname, title, anchor, descr, score, filename, kind] = result return score }, */ @@ -47,6 +40,14 @@ if (typeof Scorer === "undefined") { }; } +// Global search result kind enum, used by themes to style search results. +class SearchResultKind { + static get index() { return "index"; } + static get object() { return "object"; } + static get text() { return "text"; } + static get title() { return "title"; } +} + const _removeChildren = (element) => { while (element && element.lastChild) element.removeChild(element.lastChild); }; @@ -64,9 +65,13 @@ const _displayItem = (item, searchTerms, highlightTerms) => { const showSearchSummary = DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY; const contentRoot = document.documentElement.dataset.content_root; - const [docName, title, anchor, descr, score, _filename] = item; + const [docName, title, anchor, descr, score, _filename, kind] = item; let listItem = document.createElement("li"); + // Add a class representing the item's type: + // can be used by a theme's CSS selector for styling + // See SearchResultKind for the class names. + listItem.classList.add(`kind-${kind}`); let requestUrl; let linkUrl; if (docBuilder === "dirhtml") { @@ -99,7 +104,7 @@ const _displayItem = (item, searchTerms, highlightTerms) => { .then((data) => { if (data) listItem.appendChild( - Search.makeSearchSummary(data, searchTerms) + Search.makeSearchSummary(data, searchTerms, anchor) ); // highlight search terms in the summary if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js @@ -115,9 +120,11 @@ const _finishSearch = (resultCount) => { "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories." ); else - Search.status.innerText = _( - `Search finished, found ${resultCount} page(s) matching the search query.` - ); + Search.status.innerText = Documentation.ngettext( + "Search finished, found one page matching the search query.", + "Search finished, found ${resultCount} pages matching the search query.", + resultCount, + ).replace('${resultCount}', resultCount); }; const _displayNextItem = ( results, @@ -137,6 +144,22 @@ const _displayNextItem = ( // search finished, update title and status message else _finishSearch(resultCount); }; +// Helper function used by query() to order search results. +// Each input is an array of [docname, title, anchor, descr, score, filename, kind]. +// Order the results by score (in opposite order of appearance, since the +// `_displayNextItem` function uses pop() to retrieve items) and then alphabetically. +const _orderResultsByScoreThenName = (a, b) => { + const leftScore = a[4]; + const rightScore = b[4]; + if (leftScore === rightScore) { + // same score: sort alphabetically + const leftTitle = a[1].toLowerCase(); + const rightTitle = b[1].toLowerCase(); + if (leftTitle === rightTitle) return 0; + return leftTitle > rightTitle ? -1 : 1; // inverted is intentional + } + return leftScore > rightScore ? 1 : -1; +}; /** * Default splitQuery function. Can be overridden in ``sphinx.search`` with a @@ -160,13 +183,26 @@ const Search = { _queued_query: null, _pulse_status: -1, - htmlToText: (htmlString) => { + htmlToText: (htmlString, anchor) => { const htmlElement = new DOMParser().parseFromString(htmlString, 'text/html'); - htmlElement.querySelectorAll(".headerlink").forEach((el) => { el.remove() }); + for (const removalQuery of [".headerlink", "script", "style"]) { + htmlElement.querySelectorAll(removalQuery).forEach((el) => { el.remove() }); + } + if (anchor) { + const anchorContent = htmlElement.querySelector(`[role="main"] ${anchor}`); + if (anchorContent) return anchorContent.textContent; + + console.warn( + `Anchored content block not found. Sphinx search tries to obtain it via DOM query '[role=main] ${anchor}'. Check your theme or template.` + ); + } + + // if anchor not specified or not found, fall back to main content const docContent = htmlElement.querySelector('[role="main"]'); - if (docContent !== undefined) return docContent.textContent; + if (docContent) return docContent.textContent; + console.warn( - "Content block not found. Sphinx search tries to obtain it via '[role=main]'. Could you check your theme or template." + "Content block not found. Sphinx search tries to obtain it via DOM query '[role=main]'. Check your theme or template." ); return ""; }, @@ -219,6 +255,7 @@ const Search = { searchSummary.classList.add("search-summary"); searchSummary.innerText = ""; const searchList = document.createElement("ul"); + searchList.setAttribute("role", "list"); searchList.classList.add("search"); const out = document.getElementById("search-results"); @@ -239,16 +276,7 @@ const Search = { else Search.deferQuery(query); }, - /** - * execute search (requires search index to be loaded) - */ - query: (query) => { - const filenames = Search._index.filenames; - const docNames = Search._index.docnames; - const titles = Search._index.titles; - const allTitles = Search._index.alltitles; - const indexEntries = Search._index.indexentries; - + _parseQuery: (query) => { // stem the search terms and add them to the correct list const stemmer = new Stemmer(); const searchTerms = new Set(); @@ -284,22 +312,40 @@ const Search = { // console.info("required: ", [...searchTerms]); // console.info("excluded: ", [...excludedTerms]); - // array of [docname, title, anchor, descr, score, filename] - let results = []; + return [query, searchTerms, excludedTerms, highlightTerms, objectTerms]; + }, + + /** + * execute search (requires search index to be loaded) + */ + _performSearch: (query, searchTerms, excludedTerms, highlightTerms, objectTerms) => { + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const titles = Search._index.titles; + const allTitles = Search._index.alltitles; + const indexEntries = Search._index.indexentries; + + // Collect multiple result groups to be sorted separately and then ordered. + // Each is an array of [docname, title, anchor, descr, score, filename, kind]. + const normalResults = []; + const nonMainIndexResults = []; + _removeChildren(document.getElementById("search-progress")); - const queryLower = query.toLowerCase(); + const queryLower = query.toLowerCase().trim(); for (const [title, foundTitles] of Object.entries(allTitles)) { - if (title.toLowerCase().includes(queryLower) && (queryLower.length >= title.length/2)) { + if (title.toLowerCase().trim().includes(queryLower) && (queryLower.length >= title.length/2)) { for (const [file, id] of foundTitles) { - let score = Math.round(100 * queryLower.length / title.length) - results.push([ + const score = Math.round(Scorer.title * queryLower.length / title.length); + const boost = titles[file] === title ? 1 : 0; // add a boost for document titles + normalResults.push([ docNames[file], titles[file] !== title ? `${titles[file]} > ${title}` : title, id !== null ? "#" + id : "", null, - score, + score + boost, filenames[file], + SearchResultKind.title, ]); } } @@ -308,46 +354,48 @@ const Search = { // search for explicit entries in index directives for (const [entry, foundEntries] of Object.entries(indexEntries)) { if (entry.includes(queryLower) && (queryLower.length >= entry.length/2)) { - for (const [file, id] of foundEntries) { - let score = Math.round(100 * queryLower.length / entry.length) - results.push([ + for (const [file, id, isMain] of foundEntries) { + const score = Math.round(100 * queryLower.length / entry.length); + const result = [ docNames[file], titles[file], id ? "#" + id : "", null, score, filenames[file], - ]); + SearchResultKind.index, + ]; + if (isMain) { + normalResults.push(result); + } else { + nonMainIndexResults.push(result); + } } } } // lookup as object objectTerms.forEach((term) => - results.push(...Search.performObjectSearch(term, objectTerms)) + normalResults.push(...Search.performObjectSearch(term, objectTerms)) ); // lookup as search terms in fulltext - results.push(...Search.performTermsSearch(searchTerms, excludedTerms)); + normalResults.push(...Search.performTermsSearch(searchTerms, excludedTerms)); // let the scorer override scores with a custom scoring function - if (Scorer.score) results.forEach((item) => (item[4] = Scorer.score(item))); - - // now sort the results by score (in opposite order of appearance, since the - // display function below uses pop() to retrieve items) and then - // alphabetically - results.sort((a, b) => { - const leftScore = a[4]; - const rightScore = b[4]; - if (leftScore === rightScore) { - // same score: sort alphabetically - const leftTitle = a[1].toLowerCase(); - const rightTitle = b[1].toLowerCase(); - if (leftTitle === rightTitle) return 0; - return leftTitle > rightTitle ? -1 : 1; // inverted is intentional - } - return leftScore > rightScore ? 1 : -1; - }); + if (Scorer.score) { + normalResults.forEach((item) => (item[4] = Scorer.score(item))); + nonMainIndexResults.forEach((item) => (item[4] = Scorer.score(item))); + } + + // Sort each group of results by score and then alphabetically by name. + normalResults.sort(_orderResultsByScoreThenName); + nonMainIndexResults.sort(_orderResultsByScoreThenName); + + // Combine the result groups in (reverse) order. + // Non-main index entries are typically arbitrary cross-references, + // so display them after other results. + let results = [...nonMainIndexResults, ...normalResults]; // remove duplicate search results // note the reversing of results, so that in the case of duplicates, the highest-scoring entry is kept @@ -361,7 +409,12 @@ const Search = { return acc; }, []); - results = results.reverse(); + return results.reverse(); + }, + + query: (query) => { + const [searchQuery, searchTerms, excludedTerms, highlightTerms, objectTerms] = Search._parseQuery(query); + const results = Search._performSearch(searchQuery, searchTerms, excludedTerms, highlightTerms, objectTerms); // for debugging //Search.lastresults = results.slice(); // a copy @@ -432,6 +485,7 @@ const Search = { descr, score, filenames[match[0]], + SearchResultKind.object, ]); }; Object.keys(objects).forEach((prefix) => @@ -459,21 +513,27 @@ const Search = { // perform the search on the required terms searchTerms.forEach((word) => { const files = []; + // find documents, if any, containing the query word in their text/title term indices + // use Object.hasOwnProperty to avoid mismatching against prototype properties const arr = [ - { files: terms[word], score: Scorer.term }, - { files: titleTerms[word], score: Scorer.title }, + { files: terms.hasOwnProperty(word) ? terms[word] : undefined, score: Scorer.term }, + { files: titleTerms.hasOwnProperty(word) ? titleTerms[word] : undefined, score: Scorer.title }, ]; // add support for partial matches if (word.length > 2) { const escapedWord = _escapeRegExp(word); - Object.keys(terms).forEach((term) => { - if (term.match(escapedWord) && !terms[word]) - arr.push({ files: terms[term], score: Scorer.partialTerm }); - }); - Object.keys(titleTerms).forEach((term) => { - if (term.match(escapedWord) && !titleTerms[word]) - arr.push({ files: titleTerms[word], score: Scorer.partialTitle }); - }); + if (!terms.hasOwnProperty(word)) { + Object.keys(terms).forEach((term) => { + if (term.match(escapedWord)) + arr.push({ files: terms[term], score: Scorer.partialTerm }); + }); + } + if (!titleTerms.hasOwnProperty(word)) { + Object.keys(titleTerms).forEach((term) => { + if (term.match(escapedWord)) + arr.push({ files: titleTerms[term], score: Scorer.partialTitle }); + }); + } } // no match but word was a required one @@ -489,16 +549,16 @@ const Search = { // set score for the word in each file recordFiles.forEach((file) => { - if (!scoreMap.has(file)) scoreMap.set(file, {}); - scoreMap.get(file)[word] = record.score; + if (!scoreMap.has(file)) scoreMap.set(file, new Map()); + const fileScores = scoreMap.get(file); + fileScores.set(word, record.score); }); }); // create the mapping files.forEach((file) => { - if (fileMap.has(file) && fileMap.get(file).indexOf(word) === -1) - fileMap.get(file).push(word); - else fileMap.set(file, [word]); + if (!fileMap.has(file)) fileMap.set(file, [word]); + else if (fileMap.get(file).indexOf(word) === -1) fileMap.get(file).push(word); }); }); @@ -530,7 +590,7 @@ const Search = { break; // select one (max) score for the file. - const score = Math.max(...wordList.map((w) => scoreMap.get(file)[w])); + const score = Math.max(...wordList.map((w) => scoreMap.get(file).get(w))); // add result to the result list results.push([ docNames[file], @@ -539,6 +599,7 @@ const Search = { null, score, filenames[file], + SearchResultKind.text, ]); } return results; @@ -549,8 +610,8 @@ const Search = { * search summary for a given text. keywords is a list * of stemmed words. */ - makeSearchSummary: (htmlText, keywords) => { - const text = Search.htmlToText(htmlText); + makeSearchSummary: (htmlText, keywords, anchor) => { + const text = Search.htmlToText(htmlText, anchor); if (text === "") return null; const textLower = text.toLowerCase(); diff --git a/docs/build/html/advanced.html b/docs/build/html/advanced.html index 00ebe77..368f597 100644 --- a/docs/build/html/advanced.html +++ b/docs/build/html/advanced.html @@ -1,24 +1,22 @@ + + - Advanced Usage — DFO-LS v1.5.4 documentation - - + Advanced Usage — DFO-LS v1.6 documentation + + - - - - - - - - + + + + + + @@ -37,9 +35,6 @@ DFO-LS -
- 1.5.4 -
diff --git a/docs/build/html/contributors.html b/docs/build/html/contributors.html index 4ac629b..481c229 100644 --- a/docs/build/html/contributors.html +++ b/docs/build/html/contributors.html @@ -1,23 +1,21 @@ + + - Contributors — DFO-LS v1.5.4 documentation - - + Contributors — DFO-LS v1.6 documentation + + - - - - - - - + + + + + @@ -35,9 +33,6 @@ DFO-LS -
- 1.5.4 -
@@ -90,7 +85,7 @@

Contributors

Main author

diff --git a/docs/build/html/diagnostic.html b/docs/build/html/diagnostic.html index 49a22d4..00d9125 100644 --- a/docs/build/html/diagnostic.html +++ b/docs/build/html/diagnostic.html @@ -1,24 +1,22 @@ + + - Diagnostic Information — DFO-LS v1.5.4 documentation - - + Diagnostic Information — DFO-LS v1.6 documentation + + - - - - - - - - + + + + + + @@ -37,9 +35,6 @@ DFO-LS -
- 1.5.4 -
diff --git a/docs/build/html/genindex.html b/docs/build/html/genindex.html index aa7b49a..575c9c6 100644 --- a/docs/build/html/genindex.html +++ b/docs/build/html/genindex.html @@ -1,22 +1,20 @@ + + - Index — DFO-LS v1.5.4 documentation - - + Index — DFO-LS v1.6 documentation + + - - - - - - - + + + + + @@ -33,9 +31,6 @@ DFO-LS -
- 1.5.4 -
diff --git a/docs/build/html/history.html b/docs/build/html/history.html index 0e3329a..62559cf 100644 --- a/docs/build/html/history.html +++ b/docs/build/html/history.html @@ -1,23 +1,21 @@ + + - Version History — DFO-LS v1.5.4 documentation - - + Version History — DFO-LS v1.6 documentation + + - - - - - - - + + + + + @@ -36,9 +34,6 @@ DFO-LS -
- 1.5.4 -
@@ -72,6 +67,7 @@
  • Version 1.5.2 (28 Oct 2024)
  • Version 1.5.3 (30 Oct 2024)
  • Version 1.5.4 (11 Feb 2025)
  • +
  • Version 1.6 (10 Sep 2025)
  • Contributors
  • @@ -221,6 +217,13 @@

    Version 1.5.4 (11 Feb 2025) +

    Version 1.6 (10 Sep 2025)

    +
      +
    • Allow use of evaluation database as x0 to reduce number of objective evaluations required in initialization phase

    • +
    • When printing solution object, reduce the maximum length of residual/Jacobian vectors that are fully displayed

    • +
    +

    diff --git a/docs/build/html/index.html b/docs/build/html/index.html index b072139..8494522 100644 --- a/docs/build/html/index.html +++ b/docs/build/html/index.html @@ -1,24 +1,22 @@ + + - DFO-LS: Derivative-Free Optimizer for Least-Squares Minimization — DFO-LS v1.5.4 documentation - - + DFO-LS: Derivative-Free Optimizer for Least-Squares Minimization — DFO-LS v1.6 documentation + + - - - - - - - - + + + + + + @@ -36,9 +34,6 @@ DFO-LS -
    - 1.5.4 -
    @@ -84,8 +79,8 @@

    DFO-LS: Derivative-Free Optimizer for Least-Squares Minimization

    -

    Release: 1.5.4

    -

    Date: 11 February 2025

    +

    Release: 1.6

    +

    Date: 10 September 2025

    Author: Lindon Roberts

    DFO-LS is a flexible package for finding local solutions to nonlinear least-squares minimization problems (with optional regularizer and constraints), without requiring any derivatives of the objective. DFO-LS stands for Derivative-Free Optimizer for Least-Squares.

    That is, DFO-LS solves

    @@ -143,6 +138,7 @@

    DFO-LS: Derivative-Free Optimizer for Least-Squares MinimizationAdding Bounds and More Output
  • Adding General Convex Constraints
  • Adding a Regularizer
  • +
  • Using Initial Evaluation Database
  • Example: Noisy Objective Evaluation
  • Example: Parameter Estimation/Data Fitting
  • Example: Solving a Nonlinear System of Equations
  • @@ -193,6 +189,7 @@

    DFO-LS: Derivative-Free Optimizer for Least-Squares MinimizationVersion 1.5.2 (28 Oct 2024)
  • Version 1.5.3 (30 Oct 2024)
  • Version 1.5.4 (11 Feb 2025)
  • +
  • Version 1.6 (10 Sep 2025)
  • Contributors
      diff --git a/docs/build/html/info.html b/docs/build/html/info.html index 575c939..b1d4e5b 100644 --- a/docs/build/html/info.html +++ b/docs/build/html/info.html @@ -1,24 +1,22 @@ + + - Overview — DFO-LS v1.5.4 documentation - - + Overview — DFO-LS v1.6 documentation + + - - - - - - - - + + + + + + @@ -37,9 +35,6 @@ DFO-LS -
      - 1.5.4 -
      diff --git a/docs/build/html/install.html b/docs/build/html/install.html index a607dc2..50858fc 100644 --- a/docs/build/html/install.html +++ b/docs/build/html/install.html @@ -1,23 +1,21 @@ + + - Installing DFO-LS — DFO-LS v1.5.4 documentation - - + Installing DFO-LS — DFO-LS v1.6 documentation + + - - - - - - - + + + + + @@ -36,9 +34,6 @@ DFO-LS -
      - 1.5.4 -
      diff --git a/docs/build/html/objects.inv b/docs/build/html/objects.inv index 6af97ea..6e114c2 100644 Binary files a/docs/build/html/objects.inv and b/docs/build/html/objects.inv differ diff --git a/docs/build/html/search.html b/docs/build/html/search.html index 867e393..877dbd4 100644 --- a/docs/build/html/search.html +++ b/docs/build/html/search.html @@ -1,23 +1,21 @@ + + - Search — DFO-LS v1.5.4 documentation - - + Search — DFO-LS v1.6 documentation + + - - - - - - - + + + + + @@ -36,9 +34,6 @@ DFO-LS -
      - 1.5.4 -
      diff --git a/docs/build/html/searchindex.js b/docs/build/html/searchindex.js index 4cd082d..8d78da1 100644 --- a/docs/build/html/searchindex.js +++ b/docs/build/html/searchindex.js @@ -1 +1 @@ -Search.setIndex({"docnames": ["advanced", "contributors", "diagnostic", "history", "index", "info", "install", "userguide"], "filenames": ["advanced.rst", "contributors.rst", "diagnostic.rst", "history.rst", "index.rst", "info.rst", "install.rst", "userguide.rst"], "titles": ["Advanced Usage", "Contributors", "Diagnostic Information", "Version History", "DFO-LS: Derivative-Free Optimizer for Least-Squares Minimization", "Overview", "Installing DFO-LS", "Using DFO-LS"], "terms": {"thi": [0, 2, 3, 4, 5, 6, 7], "section": [0, 2, 3, 7], "describ": [0, 5, 7], "differ": [0, 3, 5, 7], "option": [0, 3, 4, 5, 6], "user": [0, 4, 5, 7], "avail": [0, 7], "dfo": [0, 2, 3], "l": [0, 2, 3], "In": [0, 2, 5, 7], "last": [0, 2], "us": [0, 2, 3, 4], "we": [0, 2, 5, 7], "introduc": [0, 3], "dfol": [0, 2, 6, 7], "solv": [0, 2, 4], "which": [0, 2, 3, 4, 5, 7], "ha": [0, 2, 3, 4, 5, 7], "input": [0, 3, 4, 5, 7], "user_param": [0, 2, 7], "i": [0, 2, 3, 4, 5, 6, 7], "python": [0, 3, 6, 7], "dictionari": [0, 3, 7], "now": [0, 7], "go": 0, "through": [0, 3], "can": [0, 5, 6, 7], "chang": [0, 2, 3], "wai": [0, 5, 7], "more": [0, 3, 4, 5], "detail": [0, 4, 7], "ar": [0, 4, 5, 7], "paper": [0, 4, 5, 7], "cfmr2018": [0, 5, 7], "hr2021": [], "The": [0, 2, 4, 7], "default": [0, 3, 6, 7], "overrid": 0, "given": [0, 4, 5, 7], "some": [0, 5, 6, 7], "case": [0, 4, 5, 7], "vari": 0, "depend": [0, 2, 3, 5, 7], "whether": [0, 5, 7], "objfun": [0, 2, 3, 7], "evalu": [0, 2, 3, 4, 5], "x": [0, 4, 5, 7], "sever": [0, 5, 7], "time": [0, 2, 5, 7], "same": [0, 4, 5, 7], "give": [0, 7], "result": [0, 2, 3, 5, 7], "determin": [0, 5, 7], "objfun_has_nois": [0, 7], "inspect": 0, "instanc": [0, 5], "rounding_error_const": 0, "intern": [0, 5, 7], "all": [0, 2, 4, 5, 7], "store": [0, 3], "respect": [0, 7], "base": [0, 3, 4, 5, 7], "x_b": 0, "y_t": 0, "reduc": [0, 3], "risk": 0, "roundoff": 0, "error": [0, 2, 4, 5, 7], "shift": [0, 7], "x_k": [0, 5], "when": [0, 3, 4, 7], "s_k": [0, 2, 5], "leq": [0, 4, 5, 7], "text": [0, 2, 4, 5, 7], "const": 0, "where": [0, 5, 7], "0": [0, 2, 4, 5, 7], "1": [0, 1, 2, 4, 5, 6, 7], "safety_step_thresh": 0, "threshold": [0, 7], "call": [0, 2, 4, 5, 7], "safeti": [0, 2, 3], "step": [0, 2, 3, 5, 7], "gamma_": 0, "rho_k": [0, 2], "5": [0, 1, 4, 7], "check_objfun_for_overflow": 0, "cap": [0, 4, 5, 7], "r_i": [0, 5, 7], "thei": [0, 5, 7], "larg": [0, 3, 5], "enough": [0, 7], "an": [0, 3, 4, 5, 6, 7], "overflowerror": 0, "encount": 0, "try": [0, 4, 5], "f": [0, 2, 4, 5, 7], "true": [0, 2, 5, 7], "n_to_print_whole_x_vector": 0, "If": [0, 4, 5, 6, 7], "print": [0, 3, 7], "function": [0, 3, 4, 5, 7], "screen": 0, "file": [0, 2, 6, 7], "maximum": [0, 2, 7], "len": [0, 7], "full": [0, 3, 4, 7], "vector": [0, 2, 5, 7], "should": [0, 4, 6, 7], "also": [0, 4, 5, 6, 7], "6": [0, 4, 7], "save_diagnostic_info": [0, 2], "flag": [0, 7], "so": [0, 2, 3, 4, 7], "save": [0, 2, 3, 7], "diagnost": [0, 3, 4, 7], "each": [0, 2, 5, 7], "iter": [0, 3, 4, 7], "fals": [0, 7], "save_poised": [0, 2], "includ": [0, 2, 7], "lambda": [0, 2, 4, 7], "poised": [0, 2], "y_k": [0, 2], "most": [0, 2, 5, 7], "computation": 0, "expens": [0, 2, 5], "piec": [0, 2], "save_xk": [0, 2], "save_rk": [0, 2], "r_1": [0, 5, 7], "cdot": [0, 4, 5, 7], "r_m": [0, 5, 7], "alwai": [0, 5, 7], "init": 0, "random_initial_direct": 0, "build": [0, 7], "random": [0, 3, 7], "direct": [0, 3, 7], "oppos": 0, "coordin": [0, 7], "version": [0, 1, 4, 6, 7], "2": [0, 4, 5, 6, 7], "random_directions_make_orthogon": 0, "orthogon": 0, "run_in_parallel": 0, "ask": [0, 4, 7], "without": [0, 4], "ani": [0, 2, 4, 7], "intermedi": 0, "process": [0, 5], "tr_radiu": 0, "eta1": 0, "unsuccess": 0, "eta_1": 0, "eta2": 0, "veri": [0, 5, 7], "success": [0, 2, 7], "eta_2": 0, "7": [0, 3, 7], "gamma_dec": 0, "ratio": [0, 2], "decreas": [0, 5, 7], "delta_k": [0, 2, 5], "dec": 0, "smooth": 0, "problem": [0, 2, 3, 4, 5, 7], "98": 0, "noisi": [0, 4, 5], "e": [0, 2, 4, 5, 6, 7], "gamma_inc": 0, "increas": [0, 7], "inc": 0, "gamma_inc_overlin": 0, "overlin": 0, "gamma": 0, "_": [0, 7], "4": [0, 4, 5, 7], "alpha1": 0, "alpha_1": 0, "9": [0, 6, 7], "alpha2": 0, "alpha_2": 0, "95": 0, "abs_tol": 0, "toler": 0, "quit": 0, "below": [0, 7], "10": [0, 4, 7], "12": [0, 4, 7], "rel_tol": 0, "rel": 0, "x_0": [0, 7], "20": [0, 4, 7], "history_for_slow": 0, "histori": [0, 4], "current": [0, 4, 5, 7], "thresh_for_slow": 0, "max_slow_it": 0, "number": [0, 2, 5, 7], "consecut": 0, "befor": [0, 7], "x0": [0, 2, 7], "quit_on_noise_level": 0, "within": [0, 3, 7], "level": [0, 3, 6, 7], "scale_factor_for_quit": 0, "factor": 0, "criterion": 0, "multiplicative_noise_level": 0, "onli": [0, 2, 3, 5, 7], "specifi": [0, 7], "one": [0, 2, 5, 6, 7], "addit": [0, 3], "none": [0, 7], "additive_noise_level": 0, "precondit": 0, "scale": [0, 3, 7], "linear": [0, 2, 5, 7], "system": [0, 2, 4, 6], "improv": [0, 3, 4, 5, 7], "condit": [0, 2, 7], "throw_error_on_nan": 0, "throw": 0, "numpi": [0, 3, 6, 7], "linalg": [0, 7], "linalgerror": 0, "nan": [0, 3, 7], "gracefulli": [0, 3], "num_extra_step": 0, "extra": [0, 3, 4, 7], "other": 0, "than": [0, 3, 7], "accept": 0, "move": [0, 5, 7], "n": [0, 4, 5, 7], "increase_num_extra_steps_with_restart": 0, "amount": [0, 7], "momentum_extra_step": 0, "momentum": 0, "method": [0, 3, 4, 5, 7], "geometri": [0, 3, 5], "use_restart": 0, "do": [0, 5, 6, 7], "reach": [0, 7], "rho_": 0, "end": 0, "max_unsuccessful_restart": 0, "allow": [0, 3, 7], "did": [0, 7], "further": 0, "rhoend_scal": 0, "use_soft_restart": 0, "soft": [0, 7], "hard": 0, "num_geom_step": 0, "For": [0, 4, 5, 6, 7], "3": [0, 1, 4, 5, 6, 7], "move_xk": 0, "preserv": 0, "best": [0, 2, 5, 7], "new": [0, 3, 5, 7], "increase_npt": 0, "increase_npt_amt": 0, "increase_ndirs_initial_amt": 0, "ndirs_initi": 0, "To": [0, 2, 5, 6, 7], "avoid": [0, 3, 4, 7], "phase": [0, 7], "use_old_rk": 0, "recycl": 0, "found": [0, 2, 7], "perform": [0, 3, 5, 7], "max_npt": 0, "npt": [0, 2, 3, 7], "max_fake_successful_step": 0, "run": [0, 3, 6, 7], "smaller": 0, "larger": 0, "previou": [0, 7], "maxfun": [0, 7], "auto_detect": 0, "automat": [0, 6, 7], "still": 0, "trigger": 0, "radiu": [0, 2, 3, 5, 7], "etc": [0, 2], "how": [0, 2, 4, 6], "mani": [0, 3, 4, 5, 7], "data": [0, 4, 5], "radii": 0, "There": [0, 5, 7], "two": [0, 5], "criteria": 0, "over": [0, 7], "jacobian": [0, 2, 3, 7], "consist": 0, "trend": 0, "measur": [0, 5], "slope": 0, "correl": 0, "coeffici": 0, "line": [0, 3, 7], "fit": [0, 4], "30": [0, 4, 7], "min_chgj_slop": 0, "minimum": [0, 7], "rate": 0, "j_k": [0, 2], "j_": [0, 2, 7], "k": [0, 2, 4, 5, 7], "_f": [0, 2], "past": 0, "caus": [0, 7], "015": 0, "min_correl": 0, "requir": [0, 3, 4, 5, 7], "add": [0, 3, 7], "exclud": 0, "less": 0, "setup": [0, 3], "cost": [0, 3, 7], "impract": 0, "have": [0, 5, 6, 7], "effect": 0, "full_rank": 0, "use_full_rank_interp": 0, "perturb": 0, "make": [0, 3, 5, 6, 7], "compon": [0, 7], "search": [0, 3, 5], "space": [0, 3, 5], "m": [0, 4, 5, 6, 7], "geq": [0, 7], "otherwis": [0, 5], "opposit": 0, "perturb_trust_region_step": 0, "yet": 0, "altern": [0, 4, 6, 7], "delta_scale_new_dirn": 0, "ad": [0, 3, 4], "length": [0, 7], "scale_factor": 0, "magnitud": [0, 7], "svd_scale_factor": 0, "floor": 0, "singular": [0, 7], "nonzero": 0, "min_sing_v": 0, "absolut": 0, "svd_max_jac_cond": 0, "after": 0, "appli": [0, 7], "anoth": 0, "smallest": [0, 2], "sinc": [0, 2, 7], "largest": 0, "fix": [0, 3, 7], "8": [0, 4, 7], "do_geom_step": 0, "while": [0, 5], "per": [0, 2, 3, 7], "usual": [0, 7], "do_safety_step": 0, "regular": [1, 3, 4, 5], "reduce_delta": 0, "full_geom_step": 0, "post": 0, "involv": [0, 5], "cannot": [0, 5], "reset_delta": 0, "reset": 0, "its": [0, 7], "reset_rho": 0, "lower": [0, 2, 3, 7], "bound": [0, 2, 3, 4], "dure": [0, 3], "num_new_dirns_each_it": 0, "approach": 0, "recommend": 0, "d_tol": 0, "stop": [0, 3], "max_it": 0, "take": [0, 5, 7], "100": [0, 7], "matrix_rank": 0, "r_tol": 0, "what": [0, 2], "posisbl": 0, "diagon": 0, "entri": [0, 7], "qr": 0, "being": [0, 7], "consid": [0, 5], "zero": [0, 3, 7], "18": 0, "coralia": [0, 4, 5, 7], "carti": [0, 4, 5, 7], "jan": [0, 4, 5, 7], "fiala": [0, 4, 5, 7], "benjamin": [0, 5, 7], "marteau": [0, 4, 5, 7], "lindon": [0, 1, 4, 5, 7], "robert": [0, 1, 4, 5, 7], "flexibl": [0, 4, 5, 7], "robust": [0, 4, 5, 7], "deriv": [0, 5, 7], "free": [0, 5, 7], "optim": [0, 2, 5, 7], "solver": [0, 3, 4, 5, 7], "acm": [0, 4, 5, 7], "transact": [0, 4, 5, 7], "mathemat": [0, 4, 5, 7], "softwar": [0, 4, 5, 6, 7], "45": [0, 4, 5, 7], "2019": [0, 4, 5, 7], "pp": [0, 4, 5, 7], "32": [0, 4, 5, 7], "41": [0, 4, 5, 7], "preprint": [0, 4, 5, 7], "hough": [0, 1, 4, 5, 7], "convex": [0, 1, 3, 4, 5], "constrain": [0, 3, 4, 5, 7], "arxiv": [0, 4, 5, 7], "2111": [], "05443": [], "2021": 4, "univers": 1, "sydnei": 1, "matthew": [0, 1, 5, 7], "waterloo": 1, "handl": [1, 3, 4], "gener": [1, 4], "constraint": [1, 3, 4, 5], "saw": 2, "output": [2, 3, 4, 5], "return": [2, 3, 7], "contain": [2, 6, 7], "about": [2, 3, 7], "soln": [2, 3, 7], "diagnostic_info": [2, 7], "object": [2, 3, 4, 5], "panda": [2, 6, 7], "datafram": [2, 7], "row": 2, "explain": 2, "mean": [0, 2, 5], "type": [2, 5, 7], "column": 2, "csv": 2, "previous": 2, "defin": [2, 7], "turn": 2, "log": [2, 3, 4, 7], "info": [2, 3, 7], "to_csv": 2, "myfil": [2, 7], "exactli": [2, 7], "termin": [2, 3, 4, 7], "mai": [2, 4, 5, 7], "fulli": 2, "popul": 2, "xk": 2, "point": [2, 3, 4, 5, 7], "far": [2, 7], "rk": 2, "residu": [2, 5, 7], "fk": 2, "valu": [2, 3, 4, 5, 7], "rho": [2, 7], "delta": [2, 7], "norm_sk": 2, "norm": [2, 7], "interpolation_error": 2, "sum": [2, 4, 5, 7], "squar": [0, 2, 5], "from": [2, 3, 4, 5, 6, 7], "interpolation_condition_numb": 2, "matrix": [2, 4, 7], "interpolation_change_j_norm": 2, "frobeniu": 2, "interpolation_total_residu": 2, "total": [2, 7], "set": [2, 3, 4, 5, 7], "pois": 2, "comput": [2, 5, 7], "max_distance_xk": 2, "distanc": 2, "norm_gk": 2, "gradient": 2, "g_k": 2, "nrun": [2, 7], "been": [2, 4, 7], "restart": [2, 3, 4, 7], "nf": [2, 7], "see": [2, 6, 7], "nx": [2, 7], "nsampl": [2, 7], "iter_this_run": 2, "iters_tot": 2, "iter_typ": 2, "A": [2, 4, 5], "descript": [2, 5, 7], "had": 2, "g": [2, 5, 6, 7], "actual": 2, "predict": [2, 5], "reduct": 2, "slow_it": 2, "equal": 2, "slow": [2, 4, 7], "wa": [2, 4, 6, 7], "list": [3, 7], "updat": 3, "between": 3, "them": [3, 5, 7], "initi": [3, 4, 7], "releas": [3, 4], "minor": 3, "bug": 3, "trust": [3, 4, 5, 6, 7], "region": [3, 4, 5, 6, 7], "subproblem": [0, 3, 5, 6, 7], "crvmin": 3, "calcul": [0, 3, 5, 7], "correctli": [3, 7], "minim": [3, 5], "impact": [3, 7], "arg": 3, "pass": [3, 7], "argument": [3, 4], "paramet": [3, 4], "regim": 3, "correct": [3, 7], "exit": [3, 7], "retriev": 3, "instal": [3, 4], "invers": 3, "ensur": [3, 7], "whole": 3, "feasibl": [3, 4, 7], "overflow": 3, "link": 3, "code": [3, 6, 7], "zenodo": 3, "creat": 3, "doi": 3, "algorithm": [3, 4, 7], "determinist": 3, "initialis": [3, 7], "longer": 3, "necessari": 3, "seed": [3, 7], "reproduc": [3, 7], "model": [3, 4, 5, 7], "hessian": 3, "rather": 3, "just": [3, 7], "upper": [3, 7], "triangular": 3, "part": [3, 7], "runtim": 3, "oper": [3, 7], "faster": [3, 7], "solut": [3, 4, 5, 6, 7], "fortran": [3, 6], "trustregion": [3, 6], "packag": [3, 4, 6], "interpol": [3, 4, 5, 7], "multipl": [3, 4, 5, 7], "right": [3, 7], "hand": [3, 5, 6], "side": [3, 5], "don": 3, "t": [3, 4, 5, 7], "adjust": [3, 7], "start": [3, 5, 7], "close": [3, 5, 7], "long": 3, "behavior": 3, "enabl": 3, "bugfix": 3, "divid": 3, "warn": [3, 7], "auto": 3, "detect": 3, "remov": [3, 6], "deprec": 3, "customis": 3, "finit": [3, 5], "arbitrari": [3, 7], "simpl": [3, 4, 6], "modul": [3, 7], "inform": [3, 4, 5, 7], "unconstrain": 3, "newer": [3, 7], "scipi": [3, 5, 6, 7], "least": [0, 3, 5], "11": [4, 6, 7], "occasion": 3, "undetermin": 3, "trial": [3, 5, 7], "date": 4, "29": [4, 7], "januari": [], "2024": [0, 4, 5, 7], "author": 4, "find": [4, 5, 7], "local": [4, 7], "nonlinear": 4, "stand": 4, "That": [4, 5], "min_": [4, 5, 7], "mathbb": [4, 5, 7], "r": [4, 5, 7], "quad": [4, 5, 7], "sum_": [4, 5, 7], "r_": [4, 5, 7], "": [4, 5, 7], "c": [4, 5, 6, 7], "b": [4, 5, 7], "intersect": [4, 5, 7], "provid": [4, 5, 6, 7], "non": [0, 3, 4, 7], "relax": [4, 7], "never": [4, 7], "our": [4, 5, 7], "j": [4, 7], "gn": 4, "you": [4, 5, 6, 7], "interest": [4, 5], "structur": 4, "wish": [4, 5, 7], "py": 4, "bobyqa": 4, "featur": 4, "under": 4, "gnu": 4, "public": 4, "licens": 4, "pleas": 4, "contact": 4, "nag": 4, "conda": 4, "pip": 4, "manual": 4, "test": [4, 7], "uninstal": 4, "overview": [4, 7], "equat": 4, "refer": 4, "exampl": [4, 5, 6], "estim": [4, 5], "advanc": [4, 7], "usag": [4, 7], "manag": 4, "small": [4, 5, 7], "progress": [4, 7], "stochast": [4, 7], "nois": [4, 5, 7], "regress": [4, 7], "dynam": 4, "grow": 4, "dykstra": [4, 7], "check": [4, 5], "rank": 4, "count": [4, 7], "feb": 4, "2018": 4, "jun": 4, "16": [4, 7], "apr": 4, "2020": 4, "13": [4, 7], "26": [4, 7], "nov": 4, "contributor": 4, "main": [4, 5, 7], "develop": [4, 5], "supervis": 4, "support": [3, 4, 6, 7], "epsrc": 4, "centr": 4, "doctor": 4, "train": 4, "industri": 4, "focus": 4, "ep": 4, "l015803": 4, "collabor": 4, "numer": 4, "group": 4, "design": [5, 7], "simpli": 5, "doe": [5, 7], "nor": 5, "attempt": 5, "differenc": 5, "situat": 5, "prefer": 5, "vast": 5, "major": 5, "even": 5, "imposs": 5, "inaccur": 5, "By": 5, "get": [5, 7], "happen": 5, "mont": 5, "carlo": 5, "simul": 5, "physic": 5, "experi": 5, "everi": [5, 7], "prohibit": 5, "fewest": 5, "possibl": [5, 7], "howev": [5, 7], "probabl": 5, "good": [5, 7], "idea": 5, "librari": 5, "common": [4, 5, 7], "quantit": 5, "disciplin": 5, "observ": [5, 7], "typic": [4, 5], "proccess": 5, "known": [5, 7], "mathrm": 5, "ob": 5, "x_1": [5, 7], "ldot": 5, "x_n": 5, "quantiti": 5, "y": [5, 7], "need": [5, 7], "suitabl": [5, 7], "choic": [4, 5, 7], "directli": [5, 6, 7], "calibr": [5, 7], "relationship": 5, "suppos": [5, 7], "_1": [4, 5, 7], "y_1": 5, "_m": 5, "y_m": 5, "Then": 5, "produc": [5, 7], "y_i": [5, 7], "_i": [5, 7], "form": [5, 7], "As": [5, 7], "abov": [5, 6, 7], "particularli": [5, 7], "satisfi": [5, 7], "r_2": 5, "vdot": 5, "Such": 5, "possibli": [3, 4, 5, 7], "infinit": 5, "often": [5, 7], "certainli": 5, "unknown": 5, "sai": 5, "underdetermin": 5, "overdetermin": 5, "choos": [5, 7], "sin": 5, "x_2": [5, 7], "similarli": 5, "like": [5, 7], "keep": 5, "exist": 5, "sens": 5, "instead": [4, 5, 7], "approxim": [5, 7], "left": 5, "formul": 5, "similar": 5, "difficult": 5, "strongli": 5, "closest": [5, 7], "guarante": 5, "your": [5, 6, 7], "techniqu": 5, "deflat": 5, "categori": 5, "nonconvex": 5, "m_k": 5, "approx": [5, 7], "maintain": 5, "size": [5, 7], "At": 5, "task": 5, "x_": [5, 7], "stai": 5, "put": 5, "delta_": 5, "repeat": 5, "construct": [5, 7], "sure": [5, 6], "accur": [0, 5, 7], "regularli": 5, "well": 5, "aren": 5, "complet": 5, "follow": [6, 7], "http": [6, 7], "www": 6, "org": 6, "addition": 6, "higher": 6, "17": [], "pydata": 6, "fast": 6, "compil": 6, "gfortran": 6, "work": 6, "anaconda": 6, "environ": 6, "forg": 6, "easi": [6, 7], "root": 6, "block": [], "bash": [], "sudo": [], "easy_instal": [], "privileg": [], "want": 7, "privat": [], "home": [], "directori": [6, 7], "note": [4, 6, 7], "older": 6, "present": 6, "upgrad": 6, "latest": 6, "download": 6, "sourc": 6, "github": [6, 7], "unpack": 6, "git": 6, "clone": 6, "com": [6, 7], "numericalalgorithmsgroup": 6, "cd": 6, "written": 6, "pure": 6, "It": [6, 7], "navig": 6, "top": 6, "rerun": 6, "pull": 6, "admin": [], "html": 7, "document": [6, 7], "locat": 6, "site": 6, "interfac": 7, "empti": 7, "framework": 7, "depth": 7, "technic": 7, "via": 7, "both": 7, "must": [0, 7], "dimension": 7, "arrai": 7, "shape": 7, "min": 7, "resid": 7, "float": 7, "first": 7, "partial": 7, "x_j": 7, "integ": 7, "sampl": 7, "averag": 7, "msg": 7, "why": 7, "finish": 7, "string": 7, "tabl": 7, "show": 7, "variabl": 7, "exit_success": 7, "successfulli": 7, "suffici": 7, "exit_maxfun_warn": 7, "exit_slow_warn": 7, "exit_false_success_warn": 7, "wors": 7, "exit_tr_increase_warn": 7, "exit_input_error": 7, "exit_tr_increase_error": 7, "occur": 7, "exit_linalg_error": 7, "algebra": 7, "exit_eval_error": 7, "These": 7, "access": 7, "project": 7, "rhobeg": 7, "rhoend": 7, "1e": 7, "scaling_within_bound": 7, "do_log": 7, "print_progress": 7, "tupl": 7, "a_i": 7, "b_i": 7, "either": 7, "f1": 7, "f2": 7, "fn": 7, "onto": 7, "correspond": 7, "max": 7, "infti": 7, "request": 7, "1000": 7, "nrestart": 7, "applic": 7, "param1": 7, "val1": 7, "param2": 7, "val2": 7, "next": 7, "indic": 7, "sensibl": 7, "overridden": 7, "becom": 7, "order": 7, "visibl": 7, "unless": 7, "practic": 7, "achiev": 7, "rosenbrock": 7, "write": 7, "commonli": 7, "purpos": 7, "script": 7, "__future__": 7, "import": 7, "print_funct": 7, "np": 7, "def": 7, "displai": 7, "along": 7, "xmin": 7, "33": 7, "00180000e": [], "01": 7, "00000000e": 7, "00": 7, "19971362e": [], "page": 7, "extend": 7, "alon": 7, "85": 7, "81": 7, "10862447e": [], "14": 7, "58": [], "79999999e": 7, "99999998e": [], "62398179e": [], "outsid": 7, "runtimewarn": 7, "out": 7, "basicconfig": 7, "format": 7, "messag": 7, "And": 7, "eval": 7, "39": 7, "65": 7, "337296": 7, "08": 7, "55": 7, "25": 7, "73": 7, "57": 7, "010000001407575": [], "89999999": [], "80999999": [], "00999999999999997": [], "could": 7, "replac": 7, "filenam": 7, "filemod": 7, "w": 7, "deactiv": 7, "obj": 7, "grad": 7, "43e": 7, "61e": 7, "02": 7, "20e": 7, "35e": 7, "77e": 7, "80e": 7, "00e": 7, "50e": 7, "56": 7, "subject": [], "pball": [], "pbox": [], "ball": 7, "box": [0, 4, 5, 7], "lie": [], "One": [], "equival": [], "separ": [], "u": 7, "debug": [], "implement": 7, "too": [3, 7], "becaus": 7, "gave": 7, "activ": 7, "15359245": 7, "43592448": 7, "81557703": 7, "79826221e": 7, "00004412e": 7, "81976605e": 7, "15": 7, "let": 7, "modifi": 7, "compar": 7, "gaussian": 7, "rosenbrock_noisi": 7, "normal": 7, "demonstr": 7, "rang": 7, "str": 7, "opt": 7, "least_squar": 7, "10g": 7, "nfev": 7, "statu": 7, "4776183": 7, "20880346": 7, "44306447": 7, "24929965": 7, "48217255": 7, "17849989": 7, "44180389": 7, "19667014": 7, "39545837": 7, "20903317": 7, "00000003": [], "59634974e": [], "07": [], "63036198e": [], "09": 7, "550476524e": [], "53": [], "98196347e": [], "90335675e": [], "01941978e": [], "24991776e": [], "05": [], "20000087": [], "00000235": [], "23": 7, "95535774": [], "xtol": 7, "abl": 7, "troubl": 7, "unabl": 7, "therefor": 7, "06227943e": [], "51525603e": [], "650274685e": [], "99950530e": [], "00670067e": [], "96161167e": [], "41166495e": [], "04": 7, "short": 7, "taken": 7, "here": 7, "t_i": 7, "exponenti": 7, "decai": 7, "exp": 7, "origin": 7, "uk": 7, "mathwork": 7, "help": 7, "ug": 7, "lsqcurvefit": 7, "tdata": 7, "19": 7, "24": 7, "28": [4, 7], "35": 7, "60": 7, "74": 7, "ydata": 7, "455": 7, "428": 7, "124": 7, "67": 7, "43": 7, "prediction_error": 7, "expect": 7, "1e20": 7, "awai": 7, "98830861e": 7, "01256863e": 7, "1816709": 7, "06098397": [], "76276301": [], "11962354": [], "26589796": [], "59788814": [], "02611897": [], "5123537": [], "56145452": 7, "63266662": 7, "504886892": 7, "79": [], "12897463e": [], "09843514e": [], "59085679e": [], "42808544e": [], "47252555e": [], "70205419e": [], "03": 7, "34676365e": [], "33017181e": [], "71355033e": [], "04752848e": [], "75304364e": [], "09280752e": [], "83184867e": [], "97239623e": [], "22992989e": [], "70749826e": [], "24129962e": [], "95045269e": [], "65956876e": [], "07858081e": [], "plot": 7, "v": 7, "linspac": 7, "90": 7, "matplotlib": 7, "pyplot": 7, "plt": 7, "figur": 7, "ax": 7, "gca": 7, "label": 7, "bo": 7, "set_xlabel": 7, "set_ylabel": 7, "legend": 7, "loc": 7, "grid": 7, "lastli": 7, "sa": 7, "cdl": 7, "en": 7, "imlug": 7, "66112": 7, "viewer": 7, "htm": 7, "imlug_genstatexpls_sect004": 7, "math": 7, "x1": 7, "x2": 7, "nonlinear_system": 7, "09777309": 7, "32510588": 7, "45394186e": [], "95108811e": [], "827884295e": [], "32499552": [], "90216381": [], "22664908": [], "00061604": [], "high": 7, "accuraci": [0, 7], "april": [], "siam": [0, 4, 5, 7], "journal": [0, 4, 5, 7], "21": [0, 4, 5, 7], "2022": [0, 4, 5, 7], "2552": [0, 4, 5, 7], "2579": [0, 4, 5, 7], "pyproject": [3, 6], "toml": [3, 6], "pytest": 6, "pyarg": 6, "hr2022": [0, 5, 7], "migrat": 3, "drop": 3, "v1": [3, 7], "func_tol": 0, "criticality_measur": 0, "critic": 0, "stationar": 0, "tr_step": 0, "fista": 0, "500": 0, "sfista": 0, "max_iters_sc": 0, "septemb": [], "h": [0, 4, 5, 7], "c_1": [4, 5, 7], "c_n": [4, 5, 7], "c_i": [4, 5, 7], "lipschitz": [4, 7], "continu": [4, 7], "differenti": [4, 7], "overfit": [4, 7], "l1": [4, 7], "lasso": [4, 7], "tikhonov": [4, 7], "ridg": [4, 7], "_2": [4, 7], "incorpor": [4, 7], "term": [3, 4, 7], "sqrt": [4, 7], "although": 4, "slightli": [4, 7], "violat": [4, 7], "round": [4, 7], "liu": [0, 1, 4, 5, 7], "lam": [0, 1, 4, 5, 7], "black": [0, 4, 5, 7], "2407": [0, 4, 5, 7], "14915": [0, 4, 5, 7], "australian": [1, 4], "research": 4, "council": 4, "de240100006": 4, "llr2024": [0, 5, 7], "yanjun": [0, 1, 5, 7], "kevin": [0, 1, 5, 7], "lh": 7, "prox_uh": 7, "argsf": 7, "argsh": 7, "argsprox": 7, "constant": 7, "euclidean": 7, "posit": 7, "l_h": 7, "proxim": 7, "operatornam": 7, "prox": 7, "uh": 7, "sign": 7, "ab": 7, "princeton": 1, "nonsmooth": [1, 3], "nation": 1, "infeas": 3, "sep": 4, "know": 7, "proj": 7, "argmin": 7, "better": 7, "explicitli": 7, "unit": 7, "simplex": 7, "x_i": 7, "inequ": 7, "explicit": 7, "express": 7, "onlin": 7, "databas": 7, "textbook": 7, "b2017": 7, "name": 7, "center": 7, "ball_proj": 7, "potenti": 7, "encourag": 7, "certain": 7, "properti": 7, "wide": 7, "spars": 7, "revers": 7, "triangl": 7, "henc": 7, "frac": 7, "2u": 7, "element": 7, "wise": 7, "artifici": 7, "dimens": 7, "arang": 7, "reshap": 7, "lda": 7, "85049254e": 7, "03534168e": 7, "19957812e": 7, "47953030e": 7, "30074165e": 7, "52029666": 7, "17185715": 7, "27822451": 7, "28821556": 7, "24831856": 7, "17654034": 7, "08211591": 7, "02946872": 7, "1546391": 7, "29091242": 7, "8682829845": 7, "34": 7, "75619848e": 7, "50000000e": 7, "60000000e": 7, "70000000e": 7, "80000000e": 7, "90000000e": 7, "relat": 7, "amir": 7, "beck": 7, "2017": 7, "octob": [], "xmin_eval_num": [3, 7], "repres": 7, "index": 7, "match": 7, "jacmin_eval_num": [3, 7], "9982000e": 7, "0000000e": 7, "0079924e": 7, "31": 7, "15519307e": 7, "42": 7, "54": 7, "27": 7, "came": 7, "00000001": 7, "00000002": 7, "17481720e": 7, "04150014e": 7, "352509879e": 7, "98079840e": 7, "00105722e": 7, "93887907e": 7, "06567570e": 7, "83907501": 7, "56093684e": 7, "17835345e": 7, "443440912e": 7, "98649933e": 7, "93403044e": 7, "93112150e": 7, "78830812e": 7, "06098396": 7, "76276296": 7, "11962351": 7, "26589799": 7, "59788816": 7, "02611898": 7, "51235371": 7, "111": 7, "12901055e": 7, "09843504e": 7, "59087363e": 7, "42808534e": 7, "47254068e": 7, "70205403e": 7, "34676757e": 7, "33017163e": 7, "71358948e": 7, "04752831e": 7, "75309286e": 7, "09280596e": 7, "83185935e": 7, "97239504e": 7, "22997879e": 7, "70749550e": 7, "24146460e": 7, "95045170e": 7, "65964661e": 7, "07858021e": 7, "104": 7, "109": 7, "110": 7, "38601752e": 7, "70204653e": 7, "916172822e": 7, "32527052": 7, "90227531": 7, "22943034": 7, "99958226": 7, "0100000000000225": 7, "80999998": 7, "parallel": 3, "oct": 4, "abil": 3, "load": [3, 7], "februari": 4, "2025": 4, "onward": 7, "convert": 7, "serial": 7, "json": 7, "soln_dict": 7, "to_dict": 7, "serializ": 7, "dict": 7, "open": 7, "dfols_result": 7, "dump": 7, "indent": 7, "read": 7, "optimresult": 7, "from_dict": 7, "boolean": 7, "replace_nan": 7, "earli": 3}, "objects": {}, "objtypes": {}, "objnames": {}, "titleterms": {"advanc": 0, "usag": 0, "gener": [0, 7], "algorithm": [0, 2, 5], "paramet": [0, 5, 7], "log": 0, "output": [0, 7], "initi": 0, "point": 0, "trust": [0, 2], "region": [0, 2], "manag": 0, "termin": 0, "small": 0, "object": [0, 7], "valu": 0, "slow": 0, "progress": [0, 2], "stochast": 0, "nois": 0, "inform": [0, 2], "interpol": [0, 2], "regress": 0, "model": [0, 2], "multipl": 0, "restart": 0, "dynam": 0, "grow": 0, "set": 0, "dykstra": 0, "": 0, "check": 0, "matrix": 0, "rank": 0, "refer": [0, 5, 7], "contributor": 1, "main": 1, "author": 1, "diagnost": 2, "current": 2, "iter": 2, "count": 2, "version": 3, "histori": 3, "1": 3, "0": 3, "6": 3, "feb": 3, "2018": 3, "20": 3, "2": 3, "jun": 3, "16": 3, "jan": 3, "2019": 3, "5": 3, "apr": 3, "12": 3, "2020": 3, "13": 3, "26": 3, "2021": 3, "3": 3, "8": 3, "nov": 3, "4": 3, "29": 3, "2024": 3, "dfo": [4, 5, 6, 7], "l": [4, 5, 6, 7], "deriv": 4, "free": 4, "optim": 4, "least": [4, 7], "squar": [4, 7], "minim": [4, 7], "content": 4, "acknowledg": 4, "overview": 5, "when": 5, "us": [5, 6, 7], "fit": [5, 7], "solv": [5, 7], "nonlinear": [5, 7], "system": [5, 7], "equat": [5, 7], "detail": 5, "instal": 6, "requir": 6, "conda": 6, "pip": 6, "manual": 6, "test": 6, "uninstal": 6, "how": 7, "option": 7, "argument": 7, "A": 7, "simpl": 7, "exampl": 7, "ad": 7, "bound": 7, "more": 7, "handl": 0, "arbitrari": [], "convex": 7, "constraint": 7, "noisi": 7, "evalu": 7, "estim": 7, "data": 7, "11": 3, "regular": [0, 7], "sep": 3, "10": 3, "oct": 3, "28": 3, "30": 3, "2025": 3}, "envversion": {"sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx": 60}, "alltitles": {"Advanced Usage": [[0, "advanced-usage"]], "General Algorithm Parameters": [[0, "general-algorithm-parameters"]], "Logging and Output": [[0, "logging-and-output"]], "Initialization of Points": [[0, "initialization-of-points"]], "Trust Region Management": [[0, "trust-region-management"]], "Termination on Small Objective Value": [[0, "termination-on-small-objective-value"]], "Termination on Slow Progress": [[0, "termination-on-slow-progress"]], "Stochastic Noise Information": [[0, "stochastic-noise-information"]], "Interpolation Management": [[0, "interpolation-management"]], "Regression Model Management": [[0, "regression-model-management"]], "Multiple Restarts": [[0, "multiple-restarts"]], "Dynamically Growing Initial Set": [[0, "dynamically-growing-initial-set"]], "Dykstra\u2019s Algorithm": [[0, "dykstra-s-algorithm"]], "Checking Matrix Rank": [[0, "checking-matrix-rank"]], "Handling regularizer": [[0, "handling-regularizer"]], "References": [[0, "references"], [5, "references"], [7, "references"]], "Contributors": [[1, "contributors"], [1, "id1"]], "Main author": [[1, "main-author"]], "Diagnostic Information": [[2, "diagnostic-information"]], "Current Iterate": [[2, "current-iterate"]], "Trust Region": [[2, "trust-region"]], "Model Interpolation": [[2, "model-interpolation"]], "Iteration Count": [[2, "iteration-count"]], "Algorithm Progress": [[2, "algorithm-progress"]], "DFO-LS: Derivative-Free Optimizer for Least-Squares Minimization": [[4, "dfo-ls-derivative-free-optimizer-for-least-squares-minimization"]], "Contents:": [[4, null]], "Acknowledgements": [[4, "acknowledgements"]], "Overview": [[5, "overview"]], "When to use DFO-LS": [[5, "when-to-use-dfo-ls"]], "Parameter Fitting": [[5, "parameter-fitting"]], "Solving Nonlinear Systems of Equations": [[5, "solving-nonlinear-systems-of-equations"]], "Details of the DFO-LS Algorithm": [[5, "details-of-the-dfo-ls-algorithm"]], "Installing DFO-LS": [[6, "installing-dfo-ls"]], "Requirements": [[6, "requirements"]], "Installation using conda": [[6, "installation-using-conda"]], "Installation using pip": [[6, "installation-using-pip"]], "Manual installation": [[6, "manual-installation"]], "Testing": [[6, "testing"]], "Uninstallation": [[6, "uninstallation"]], "Using DFO-LS": [[7, "using-dfo-ls"]], "Nonlinear Least-Squares Minimization": [[7, "nonlinear-least-squares-minimization"]], "How to use DFO-LS": [[7, "how-to-use-dfo-ls"]], "Optional Arguments": [[7, "optional-arguments"]], "A Simple Example": [[7, "a-simple-example"]], "Adding Bounds and More Output": [[7, "adding-bounds-and-more-output"]], "Adding General Convex Constraints": [[7, "adding-general-convex-constraints"]], "Adding a Regularizer": [[7, "adding-a-regularizer"]], "Example: Noisy Objective Evaluation": [[7, "example-noisy-objective-evaluation"]], "Example: Parameter Estimation/Data Fitting": [[7, "example-parameter-estimation-data-fitting"]], "Example: Solving a Nonlinear System of Equations": [[7, "example-solving-a-nonlinear-system-of-equations"]], "Version History": [[3, "version-history"]], "Version 1.0 (6 Feb 2018)": [[3, "version-1-0-6-feb-2018"]], "Version 1.0.1 (20 Feb 2018)": [[3, "version-1-0-1-20-feb-2018"]], "Version 1.0.2 (20 Jun 2018)": [[3, "version-1-0-2-20-jun-2018"]], "Version 1.1 (16 Jan 2019)": [[3, "version-1-1-16-jan-2019"]], "Version 1.1.1 (5 Apr 2019)": [[3, "version-1-1-1-5-apr-2019"]], "Version 1.2 (12 Feb 2020)": [[3, "version-1-2-12-feb-2020"]], "Version 1.2.1 (13 Feb 2020)": [[3, "version-1-2-1-13-feb-2020"]], "Version 1.2.2 (26 Feb 2021)": [[3, "version-1-2-2-26-feb-2021"]], "Version 1.2.3 (1 Jun 2021)": [[3, "version-1-2-3-1-jun-2021"]], "Version 1.3.0 (8 Nov 2021)": [[3, "version-1-3-0-8-nov-2021"]], "Version 1.4.0 (29 Jan 2024)": [[3, "version-1-4-0-29-jan-2024"]], "Version 1.4.1 (11 Apr 2024)": [[3, "version-1-4-1-11-apr-2024"]], "Version 1.5.0 (11 Sep 2024)": [[3, "version-1-5-0-11-sep-2024"]], "Version 1.5.1 (10 Oct 2024)": [[3, "version-1-5-1-10-oct-2024"]], "Version 1.5.2 (28 Oct 2024)": [[3, "version-1-5-2-28-oct-2024"]], "Version 1.5.3 (30 Oct 2024)": [[3, "version-1-5-3-30-oct-2024"]], "Version 1.5.4 (11 Feb 2025)": [[3, "version-1-5-4-11-feb-2025"]]}, "indexentries": {}}) \ No newline at end of file +Search.setIndex({"alltitles":{"A Simple Example":[[7,"a-simple-example"]],"Acknowledgements":[[4,"acknowledgements"]],"Adding Bounds and More Output":[[7,"adding-bounds-and-more-output"]],"Adding General Convex Constraints":[[7,"adding-general-convex-constraints"]],"Adding a Regularizer":[[7,"adding-a-regularizer"]],"Advanced Usage":[[0,null]],"Algorithm Progress":[[2,"algorithm-progress"]],"Checking Matrix Rank":[[0,"checking-matrix-rank"]],"Contents:":[[4,null]],"Contributors":[[1,null],[1,"id1"]],"Current Iterate":[[2,"current-iterate"]],"DFO-LS: Derivative-Free Optimizer for Least-Squares Minimization":[[4,null]],"Details of the DFO-LS Algorithm":[[5,"details-of-the-dfo-ls-algorithm"]],"Diagnostic Information":[[2,null]],"Dykstra\u2019s Algorithm":[[0,"dykstra-s-algorithm"]],"Dynamically Growing Initial Set":[[0,"dynamically-growing-initial-set"]],"Example: Noisy Objective Evaluation":[[7,"example-noisy-objective-evaluation"]],"Example: Parameter Estimation/Data Fitting":[[7,"example-parameter-estimation-data-fitting"]],"Example: Solving a Nonlinear System of Equations":[[7,"example-solving-a-nonlinear-system-of-equations"]],"General Algorithm Parameters":[[0,"general-algorithm-parameters"]],"Handling regularizer":[[0,"handling-regularizer"]],"How to use DFO-LS":[[7,"how-to-use-dfo-ls"]],"Initialization of Points":[[0,"initialization-of-points"]],"Installation using conda":[[6,"installation-using-conda"]],"Installation using pip":[[6,"installation-using-pip"]],"Installing DFO-LS":[[6,null]],"Interpolation Management":[[0,"interpolation-management"]],"Iteration Count":[[2,"iteration-count"]],"Logging and Output":[[0,"logging-and-output"]],"Main author":[[1,"main-author"]],"Manual installation":[[6,"manual-installation"]],"Model Interpolation":[[2,"model-interpolation"]],"Multiple Restarts":[[0,"multiple-restarts"]],"Nonlinear Least-Squares Minimization":[[7,"nonlinear-least-squares-minimization"]],"Optional Arguments":[[7,"optional-arguments"]],"Overview":[[5,null]],"Parameter Fitting":[[5,"parameter-fitting"]],"References":[[0,"references"],[5,"references"],[7,"references"]],"Regression Model Management":[[0,"regression-model-management"]],"Requirements":[[6,"requirements"]],"Solving Nonlinear Systems of Equations":[[5,"solving-nonlinear-systems-of-equations"]],"Stochastic Noise Information":[[0,"stochastic-noise-information"]],"Termination on Slow Progress":[[0,"termination-on-slow-progress"]],"Termination on Small Objective Value":[[0,"termination-on-small-objective-value"]],"Testing":[[6,"testing"]],"Trust Region":[[2,"trust-region"]],"Trust Region Management":[[0,"trust-region-management"]],"Uninstallation":[[6,"uninstallation"]],"Using DFO-LS":[[7,null]],"Using Initial Evaluation Database":[[7,"using-initial-evaluation-database"]],"Version 1.0 (6 Feb 2018)":[[3,"version-1-0-6-feb-2018"]],"Version 1.0.1 (20 Feb 2018)":[[3,"version-1-0-1-20-feb-2018"]],"Version 1.0.2 (20 Jun 2018)":[[3,"version-1-0-2-20-jun-2018"]],"Version 1.1 (16 Jan 2019)":[[3,"version-1-1-16-jan-2019"]],"Version 1.1.1 (5 Apr 2019)":[[3,"version-1-1-1-5-apr-2019"]],"Version 1.2 (12 Feb 2020)":[[3,"version-1-2-12-feb-2020"]],"Version 1.2.1 (13 Feb 2020)":[[3,"version-1-2-1-13-feb-2020"]],"Version 1.2.2 (26 Feb 2021)":[[3,"version-1-2-2-26-feb-2021"]],"Version 1.2.3 (1 Jun 2021)":[[3,"version-1-2-3-1-jun-2021"]],"Version 1.3.0 (8 Nov 2021)":[[3,"version-1-3-0-8-nov-2021"]],"Version 1.4.0 (29 Jan 2024)":[[3,"version-1-4-0-29-jan-2024"]],"Version 1.4.1 (11 Apr 2024)":[[3,"version-1-4-1-11-apr-2024"]],"Version 1.5.0 (11 Sep 2024)":[[3,"version-1-5-0-11-sep-2024"]],"Version 1.5.1 (10 Oct 2024)":[[3,"version-1-5-1-10-oct-2024"]],"Version 1.5.2 (28 Oct 2024)":[[3,"version-1-5-2-28-oct-2024"]],"Version 1.5.3 (30 Oct 2024)":[[3,"version-1-5-3-30-oct-2024"]],"Version 1.5.4 (11 Feb 2025)":[[3,"version-1-5-4-11-feb-2025"]],"Version 1.6 (10 Sep 2025)":[[3,"version-1-6-10-sep-2025"]],"Version History":[[3,null]],"When to use DFO-LS":[[5,"when-to-use-dfo-ls"]]},"docnames":["advanced","contributors","diagnostic","history","index","info","install","userguide"],"envversion":{"sphinx":65,"sphinx.domains.c":3,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":9,"sphinx.domains.index":1,"sphinx.domains.javascript":3,"sphinx.domains.math":2,"sphinx.domains.python":4,"sphinx.domains.rst":2,"sphinx.domains.std":2},"filenames":["advanced.rst","contributors.rst","diagnostic.rst","history.rst","index.rst","info.rst","install.rst","userguide.rst"],"indexentries":{},"objects":{},"objnames":{},"objtypes":{},"terms":{"":[4,5,7],"0":[0,2,4,5,7],"00":7,"00000000e":7,"00000001":7,"00000002":7,"0000000e":7,"00004412e":7,"00105722e":7,"00228767005355266":7,"00228767005355292":7,"002287670054":7,"0079924e":7,"00e":7,"01":7,"0100000000000225":7,"01243487":7,"01256863e":7,"015":0,"01572509":7,"02":7,"02611898":7,"02946872":7,"03":7,"03534168e":7,"0373781384725":7,"04":7,"04150014e":7,"04752831e":7,"06098396":7,"06567570e":7,"07858021e":7,"08":7,"08211591":7,"0866904737059":7,"09":7,"09280596e":7,"09777309":7,"09843504e":7,"1":[0,1,2,4,5,6,7],"10":[0,4,7],"100":[0,7],"1000":7,"104":7,"109":7,"10g":7,"11":[4,6,7],"110":7,"111":7,"11962351":7,"12":[0,4,7],"124":7,"12901055e":7,"13":[4,7],"14":7,"14915":[0,4,5,7],"15":7,"15359245":7,"1546391":7,"15519307e":7,"16":[4,7],"17":7,"17185715":7,"17481720e":7,"17654034":7,"17835345e":7,"17849989":7,"18":[0,7],"1816709":7,"19":7,"1910664616598":7,"19667014":7,"1981":7,"19957812e":7,"1e":7,"1e20":7,"2":[0,4,5,6,7],"20":[0,4,7],"2017":7,"2018":4,"2019":[0,4,5,7],"2020":4,"2021":4,"2022":[0,4,5,7],"2024":[0,4,5,7],"2025":4,"20880346":7,"20903317":7,"20e":7,"21":[0,4,5,7],"22":7,"228054997542":7,"2288491702299":7,"22943034":7,"22997879e":7,"23":7,"23299162":7,"23299163":7,"24":7,"2407":[0,4,5,7],"24146460e":7,"24831856":7,"24929965":7,"25":7,"2552":[0,4,5,7],"2579":[0,4,5,7],"26":[4,7],"26043004":7,"26043009":7,"26589799":7,"27":7,"27822451":7,"28":[4,7],"28821556":7,"29":[4,7],"29091242":7,"2914312375462":7,"2u":7,"3":[0,1,4,5,6,7],"30":[0,4,7],"30074165e":7,"3011037277481":7,"31":7,"32":[0,4,5,7],"32510588":7,"32527052":7,"33":7,"33017163e":7,"33371957636104":7,"337296":7,"34":7,"34676757e":7,"35":7,"352509879e":7,"35e":7,"38601752e":7,"39":7,"39545837":7,"4":[0,4,5,7],"41":[0,4,5,7],"42":7,"428":7,"42808534e":7,"43":7,"4308311759923":7,"43592448":7,"43e":7,"44180389":7,"44306447":7,"443440912e":7,"45":[0,4,5,7],"45207899459595":7,"455":7,"47254068e":7,"4776183":7,"47953030e":7,"48217255":7,"5":[0,1,4,7],"500":0,"50000000e":7,"504886892":7,"50e":7,"51235371":7,"51372886":7,"51372893":7,"52029666":7,"54":7,"54949692496583":7,"55":7,"5524099633802":7,"56":7,"56093684e":7,"56145452":7,"57":7,"59087363e":7,"59788816":7,"6":[0,4,7],"60":7,"60000000e":7,"61e":7,"63266662":7,"65":7,"6560889343479":7,"65964661e":7,"66112":7,"67":7,"7":[0,3,7],"70000000e":7,"70204653e":7,"70205403e":7,"70749550e":7,"71358948e":7,"73":7,"74":7,"75":7,"75309286e":7,"75619848e":7,"76":7,"76276296":7,"77":7,"77e":7,"78830812e":7,"79":7,"79826221e":7,"79999999e":7,"8":[0,4,7],"80":7,"80000000e":7,"80999998":7,"80e":7,"81":7,"81557703":7,"81976605e":7,"83185935e":7,"83907501":7,"84":7,"85":7,"85049254e":7,"86":7,"8682829845":7,"87":7,"88":7,"89":7,"8946356501339":7,"9":[0,6,7],"90":7,"90000000e":7,"90227531":7,"916172822e":7,"9196967094733":7,"93112150e":7,"93403044e":7,"93887907e":7,"95":0,"95045170e":7,"97239504e":7,"98":0,"98079840e":7,"98649933e":7,"98830861e":7,"99299641":7,"99299643":7,"9982000e":7,"99958226":7,"A":[2,4,5],"And":7,"As":[5,7],"At":5,"By":5,"For":[0,4,5,6,7],"If":[0,4,5,6,7],"In":[0,2,5,7],"It":[6,7],"Not":7,"One":7,"Such":5,"That":[4,5],"The":[0,2,4,7],"Then":5,"There":[0,5,7],"These":7,"To":[0,2,5,6,7],"_":[0,7],"_1":[4,5,7],"_2":[4,7],"__future__":7,"_f":[0,2],"_i":[5,7],"_m":5,"a_i":7,"ab":7,"abil":3,"abl":7,"about":[2,3,7],"abov":[5,6,7],"abs_tol":0,"absolut":0,"accept":0,"access":7,"accur":[0,5,7],"accuraci":[0,7],"achiev":7,"acm":[0,4,5,7],"activ":7,"actual":2,"ad":[0,3,4],"add":[0,3,7],"addit":[0,3],"addition":6,"additive_noise_level":0,"adjust":[3,7],"advanc":[4,7],"after":0,"algebra":7,"algorithm":[3,4,7],"all":[0,2,4,5,7],"allow":[0,3,7],"alon":7,"along":7,"alpha1":0,"alpha2":0,"alpha_1":0,"alpha_2":0,"alreadi":7,"also":[0,4,5,6,7],"altern":[0,4,6,7],"although":4,"alwai":[0,5,7],"amir":7,"amount":[0,7],"an":[0,3,4,5,6,7],"anaconda":6,"ani":[0,2,4,7],"anoth":0,"answer":7,"append":7,"appli":[0,7],"applic":7,"approach":0,"approx":[5,7],"approxim":[5,7],"apr":4,"ar":[0,3,4,5,7],"arang":7,"arbitrari":[3,7],"aren":5,"arg":3,"argmin":7,"argsf":7,"argsh":7,"argsprox":7,"argument":[3,4],"arrai":7,"artifici":7,"arxiv":[0,4,5,7],"ask":[0,4,7],"associ":7,"assum":7,"astyp":7,"attempt":5,"australian":[1,4],"author":4,"auto":3,"auto_detect":0,"automat":[0,6,7],"automaticali":7,"avail":[0,7],"averag":7,"avoid":[0,3,4,7],"awai":7,"ax":7,"b":[4,5,7],"b2017":7,"b_i":7,"ball":7,"ball_proj":7,"base":[0,3,4,5,7],"basicconfig":7,"becaus":7,"beck":7,"becom":7,"been":[2,4,7],"befor":[0,7],"begin":7,"behavior":3,"being":[0,7],"below":[0,7],"benjamin":[0,5,7],"best":[0,2,5,7],"better":7,"between":3,"black":[0,4,5,7],"bo":7,"bobyqa":4,"boolean":7,"both":7,"bound":[0,2,3,4],"box":[0,4,5,7],"bug":3,"bugfix":3,"build":[0,7],"burton":7,"c":[4,5,6,7],"c_1":[4,5,7],"c_i":[4,5,7],"c_n":[4,5,7],"calcul":[0,3,5,7],"calibr":[5,7],"call":[0,2,4,5,7],"came":7,"can":[0,5,6,7],"cannot":[0,5],"cap":[0,4,5,7],"carlo":5,"carti":[0,4,5,7],"case":[0,4,5,7],"categori":5,"caus":[0,7],"cd":6,"cdl":7,"cdot":[0,4,5,7],"center":7,"centr":4,"certain":7,"certainli":5,"cfmr2018":[0,5,7],"chang":[0,2,3],"check":[4,5,7],"check_objfun_for_overflow":0,"choic":[4,5,7],"choos":[5,7],"class":7,"clone":6,"close":[3,5,7],"closest":[5,7],"code":[3,6,7],"coeffici":0,"colinear":7,"collabor":4,"collect":7,"column":2,"com":[6,7],"common":[4,5,7],"commonli":7,"compar":7,"compil":6,"complet":5,"compon":[0,7],"comput":[2,5,7],"computation":0,"conda":4,"condit":[0,2,7],"consecut":0,"consid":[0,5],"consist":0,"const":0,"constant":7,"constrain":[0,3,4,5,7],"constraint":[1,3,4,5],"construct":[5,7],"contact":4,"contain":[2,6,7],"continu":[4,7],"contributor":4,"convert":7,"convex":[0,1,3,4,5],"coordin":[0,7],"coralia":[0,4,5,7],"correct":[3,7],"correctli":[3,7],"correl":0,"correspond":7,"cost":[0,3,7],"could":7,"council":4,"count":[4,7],"creat":3,"criteria":0,"criterion":0,"critic":0,"criticality_measur":0,"crvmin":3,"csv":2,"current":[0,4,5,7],"customis":3,"d_tol":0,"data":[0,4,5],"databas":[3,4],"datafram":[2,7],"date":4,"de240100006":4,"deactiv":7,"dec":0,"decai":7,"decreas":[0,5,7],"def":7,"default":[0,3,6,7],"defin":[2,7],"deflat":5,"delta":[2,7],"delta_":5,"delta_k":[0,2,5],"delta_scale_new_dirn":0,"demonstr":7,"depend":[0,2,3,5,7],"deprec":3,"depth":7,"deriv":[0,5,7],"describ":[0,5,7],"descript":[2,5,7],"design":[5,7],"detail":[0,4,7],"detect":3,"determin":[0,5,7],"determinist":3,"develop":[4,5],"dfo":[0,2,3],"dfol":[0,2,6,7],"dfols_result":7,"diagnost":[0,3,4,7],"diagnostic_info":[2,7],"diagon":0,"dict":7,"dictionari":[0,3,7],"did":[0,7],"differ":[0,3,5,7],"differenc":5,"differenti":[4,7],"difficult":5,"dimens":7,"dimension":7,"direct":[0,3,7],"directli":[5,6,7],"directori":[6,7],"disciplin":5,"displai":[3,7],"distanc":2,"div":7,"divid":3,"do":[0,5,6,7],"do_geom_step":0,"do_log":7,"do_safety_step":0,"doctor":4,"document":[6,7],"doe":[5,7],"doi":3,"don":3,"download":6,"drop":3,"dtype":7,"dump":7,"dure":[0,3,7],"dx":7,"dykstra":[4,7],"dynam":4,"e":[0,2,4,5,6,7],"each":[0,2,5,7],"earli":3,"easi":[6,7],"effect":0,"either":7,"element":7,"empti":7,"en":7,"enabl":3,"encount":0,"encourag":7,"end":0,"enough":[0,7],"ensur":[3,7],"entri":[0,7],"environ":6,"ep":4,"epsrc":4,"equal":2,"equat":4,"error":[0,2,4,5,7],"estim":[4,5],"eta1":0,"eta2":0,"eta_1":0,"eta_2":0,"etc":[0,2],"euclidean":7,"eval":7,"eval_db":7,"evalu":[0,2,3,4,5],"evaluationdatabas":7,"even":5,"everi":[5,7],"exactli":[2,7],"exampl":[4,5,6],"exclud":0,"exist":[5,7],"exit":[3,7],"exit_eval_error":7,"exit_false_success_warn":7,"exit_input_error":7,"exit_linalg_error":7,"exit_maxfun_warn":7,"exit_slow_warn":7,"exit_success":7,"exit_tr_increase_error":7,"exit_tr_increase_warn":7,"exp":7,"expect":7,"expens":[0,2,5],"experi":5,"explain":2,"explicit":7,"explicitli":7,"exponenti":7,"express":7,"extend":7,"extra":[0,3,4,7],"f":[0,2,4,5,7],"f1":7,"f2":7,"factor":0,"fals":[0,7],"far":[2,7],"fast":6,"faster":[3,7],"feasibl":[3,4,7],"featur":4,"feb":4,"fewer":7,"fewest":5,"fiala":[0,4,5,7],"figur":7,"file":[0,2,6,7],"filemod":7,"filenam":7,"find":[4,5,7],"finish":7,"finit":[3,5],"first":7,"fista":0,"fit":[0,4],"fix":[0,3,7],"fk":2,"flag":[0,7],"flexibl":[0,4,5,7],"float":7,"floor":0,"fn":7,"focus":4,"follow":[6,7],"forg":6,"form":[5,7],"format":7,"formul":5,"fortran":[3,6],"found":[0,2,7],"frac":7,"framework":7,"free":[0,5,7],"frobeniu":2,"from":[2,3,4,5,6,7],"from_dict":7,"full":[0,3,4,7],"full_geom_step":0,"full_rank":0,"fulli":[2,3],"func_tol":0,"function":[0,3,4,5,7],"further":0,"fvec":7,"g":[2,5,6,7],"g_k":2,"gamma":0,"gamma_":0,"gamma_dec":0,"gamma_inc":0,"gamma_inc_overlin":0,"garbow":7,"gaussian":7,"gave":7,"gca":7,"gener":[1,4],"geometri":[0,3,5],"geq":[0,7],"get":[5,7],"gfortran":6,"git":6,"github":[6,7],"give":[0,7],"given":[0,4,5,7],"gn":4,"gnu":4,"go":0,"good":[5,7],"gracefulli":[0,3],"grad":7,"gradient":2,"grid":7,"group":4,"grow":4,"guarante":5,"h":[0,4,5,7],"ha":[0,2,3,4,5,7],"had":2,"hand":[3,5,6],"handl":[1,3,4],"happen":5,"hard":0,"have":[0,5,6,7],"help":7,"henc":7,"here":7,"hessian":3,"high":7,"higher":6,"hillstrom":7,"histori":[0,4],"history_for_slow":0,"hough":[0,1,4,5,7],"how":[0,2,4,6],"howev":[5,7],"hr2022":[0,5,7],"htm":7,"html":7,"http":[6,7],"i":[0,2,3,4,5,6,7],"idea":5,"imlug":7,"imlug_genstatexpls_sect004":7,"impact":[3,7],"implement":7,"import":7,"imposs":5,"impract":0,"improv":[0,3,4,5,7],"inaccur":5,"inc":0,"includ":[0,2,7],"incorpor":[4,7],"increas":[0,7],"increase_ndirs_initial_amt":0,"increase_npt":0,"increase_npt_amt":0,"increase_num_extra_steps_with_restart":0,"indent":7,"index":7,"indic":7,"industri":4,"inequ":7,"infeas":3,"infinit":5,"info":[2,3,7],"inform":[3,4,5,7],"infti":7,"init":0,"initi":[3,4],"initialis":[3,7],"input":[0,3,4,5,7],"inspect":0,"instal":[3,4],"instanc":[0,5,7],"instead":[4,5,7],"integ":7,"interest":[4,5],"interfac":7,"intermedi":0,"intern":[0,5,7],"interpol":[3,4,5,7],"interpolation_change_j_norm":2,"interpolation_condition_numb":2,"interpolation_error":2,"interpolation_total_residu":2,"intersect":[4,5,7],"introduc":[0,3],"invers":3,"involv":[0,5],"iter":[0,3,4,7],"iter_this_run":2,"iter_typ":2,"iters_tot":2,"its":[0,7],"j":[4,7],"j_":[0,2,7],"j_k":[0,2],"jacmin_eval_num":[3,7],"jacobian":[0,2,3,7],"jan":[0,4,5,7],"jorg":7,"journal":[0,4,5,7],"json":7,"jun":4,"just":[3,7],"k":[0,2,4,5,7],"keep":5,"kenneth":7,"kevin":[0,1,5,7],"know":7,"known":[5,7],"l":[0,2,3],"l015803":4,"l1":[4,7],"l_h":7,"label":7,"lam":[0,1,4,5,7],"lambda":[0,2,4,7],"larg":[0,3,5],"larger":0,"largest":0,"lasso":[4,7],"last":[0,2],"lastli":7,"latest":6,"lda":7,"ldot":5,"least":[0,3,5],"least_squar":7,"left":5,"legend":7,"len":[0,7],"length":[0,3,7],"leq":[0,4,5,7],"less":0,"let":7,"level":[0,3,6,7],"lh":7,"librari":5,"licens":4,"like":[5,7],"linalg":[0,7],"linalgerror":0,"lindon":[0,1,4,5,7],"line":[0,3,7],"linear":[0,2,5,7],"link":3,"linspac":7,"lipschitz":[4,7],"list":[3,7],"liu":[0,1,4,5,7],"llr2024":[0,5,7],"load":[3,7],"loc":7,"local":[4,7],"locat":6,"log":[2,3,4,7],"long":[3,7],"longer":3,"look":7,"loop":7,"lower":[0,2,3,7],"lsqcurvefit":7,"m":[0,4,5,6,7],"m_k":5,"magnitud":[0,7],"mai":[2,4,5,7],"main":[4,5,7],"maintain":5,"major":5,"make":[0,3,5,6,7],"make_starting_ev":7,"manag":4,"mani":[0,3,4,5,7],"manual":4,"mark":7,"marteau":[0,4,5,7],"match":7,"math":7,"mathbb":[4,5,7],"mathemat":[0,4,5,7],"mathrm":5,"mathwork":7,"matplotlib":7,"matrix":[2,4,7],"matrix_rank":0,"matthew":[0,1,5,7],"max":7,"max_distance_xk":2,"max_fake_successful_step":0,"max_it":0,"max_iters_sc":0,"max_npt":0,"max_slow_it":0,"max_unsuccessful_restart":0,"maxfun":[0,7],"maximum":[0,2,3,7],"mean":[0,2,5,7],"measur":[0,5],"melbourn":1,"mention":7,"messag":7,"method":[0,3,4,5,7],"mgh1981":7,"migrat":3,"min":7,"min_":[4,5,7],"min_chgj_slop":0,"min_correl":0,"min_sing_v":0,"minim":[3,5],"minimum":[0,7],"minor":3,"model":[3,4,5,7],"modifi":7,"modul":[3,7],"momentum":0,"momentum_extra_step":0,"mont":5,"more":[0,3,4,5],"most":[0,2,5,7],"move":[0,5,7],"move_xk":0,"msg":7,"multipl":[3,4,5,7],"multiplicative_noise_level":0,"must":[0,7],"myfil":[2,7],"n":[0,4,5,7],"n_to_print_whole_x_vector":0,"nag":4,"name":7,"nan":[0,3,7],"nation":1,"navig":6,"ndirs_initi":0,"necessari":3,"need":[5,7],"never":[4,7],"new":[0,3,5,7],"newer":[3,7],"next":7,"nf":[2,7],"nfev":7,"nois":[4,5,7],"noisi":[0,4,5],"non":[0,3,4,7],"nonconvex":5,"none":[0,7],"nonlinear":4,"nonlinear_system":7,"nonsmooth":[1,3],"nonzero":0,"nor":5,"norm":[2,7],"norm_gk":2,"norm_sk":2,"normal":7,"note":[4,6,7],"nov":4,"now":[0,7],"np":7,"npt":[0,2,3,7],"nrestart":7,"nrun":[2,7],"nsampl":[2,7],"num_extra_step":0,"num_geom_step":0,"num_new_dirns_each_it":0,"number":[0,2,3,5,7],"numer":4,"numericalalgorithmsgroup":6,"numpi":[0,3,6,7],"nx":[2,7],"ob":5,"obj":7,"object":[2,3,4,5],"objfun":[0,2,3,7],"objfun_has_nois":[0,7],"observ":[5,7],"occasion":3,"occur":7,"oct":4,"often":[5,7],"older":6,"one":[0,2,5,6,7],"ones":7,"onli":[0,2,3,5,7],"onlin":7,"onto":7,"onward":7,"open":7,"oper":[3,7],"operatornam":7,"oppos":0,"opposit":0,"opt":7,"optim":[0,2,5,7],"optimresult":7,"option":[0,3,4,5,6],"order":7,"org":6,"origin":7,"orthogon":0,"other":[0,7],"otherwis":[0,5,7],"our":[4,5,7],"out":7,"output":[2,3,4,5],"outsid":7,"over":[0,7],"overdetermin":5,"overfit":[4,7],"overflow":3,"overflowerror":0,"overlin":0,"overrid":0,"overridden":7,"overview":[4,7],"packag":[3,4,6],"page":7,"panda":[2,6,7],"paper":[0,4,5,7],"parallel":3,"param1":7,"param2":7,"paramet":[3,4],"part":[3,7],"partial":7,"particularli":[5,7],"pass":[3,7],"past":0,"per":[0,2,3,7],"perform":[0,3,5,7],"perturb":0,"perturb_trust_region_step":0,"phase":[0,3,7],"physic":5,"piec":[0,2],"pip":4,"pleas":4,"plot":7,"plt":7,"point":[2,3,4,5,7],"pois":2,"poised":[0,2],"popul":2,"posisbl":0,"posit":7,"possibl":[5,7],"possibli":[3,4,5,7],"post":0,"potenti":7,"pp":[0,4,5,7],"practic":7,"pre":7,"precondit":0,"predict":[2,5],"prediction_error":7,"prefer":5,"preprint":[0,4,5,7],"present":6,"preserv":0,"previou":[0,7],"previous":[2,7],"princeton":1,"print":[0,3,7],"print_funct":7,"print_progress":7,"probabl":5,"problem":[0,2,3,4,5,7],"proccess":5,"process":[0,5],"produc":[5,7],"progress":[4,7],"prohibit":5,"proj":7,"project":7,"properti":7,"provid":[4,5,6,7],"prox":7,"prox_uh":7,"proxim":7,"public":4,"pull":6,"pure":6,"purpos":7,"put":5,"py":4,"pyarg":6,"pydata":6,"pyplot":7,"pyproject":[3,6],"pytest":6,"python":[0,3,6,7],"qr":0,"quad":[4,5,7],"quantit":5,"quantiti":5,"quit":0,"quit_on_noise_level":0,"r":[4,5,7],"r_":[4,5,7],"r_1":[0,5,7],"r_2":5,"r_i":[0,5,7],"r_m":[0,5,7],"r_tol":0,"radii":0,"radiu":[0,2,3,5,7],"random":[0,3,7],"random_directions_make_orthogon":0,"random_initial_direct":0,"rang":7,"rank":4,"rate":0,"rather":3,"ratio":[0,2],"reach":[0,7],"read":7,"recent":7,"recommend":0,"recycl":0,"reduc":[0,3,7],"reduce_delta":0,"reduct":2,"refer":4,"regim":3,"region":[3,4,5,6,7],"regress":[4,7],"regular":[1,3,4,5],"regularli":5,"rel":[0,7],"rel_tol":0,"relat":7,"relationship":5,"relax":[4,7],"releas":[3,4],"remov":[3,6],"repeat":5,"replac":7,"replace_nan":7,"repres":7,"reproduc":[3,7],"request":7,"requir":[0,3,4,5,7],"rerun":6,"research":4,"reset":0,"reset_delta":0,"reset_rho":0,"reshap":7,"resid":7,"residu":[2,3,5,7],"respect":[0,7],"restart":[2,3,4,7],"result":[0,2,3,5,7],"retriev":3,"return":[2,3,7],"reveal":7,"revers":7,"rho":[2,7],"rho_":0,"rho_k":[0,2],"rhobeg":7,"rhoend":7,"rhoend_scal":0,"ridg":[4,7],"right":[3,7],"risk":0,"rk":2,"robert":[0,1,4,5,7],"robust":[0,4,5,7],"root":6,"rosenbrock":7,"rosenbrock_noisi":7,"round":[4,7],"rounding_error_const":0,"roundoff":0,"row":2,"run":[0,3,6,7],"run_in_parallel":0,"runtim":3,"runtimewarn":7,"s1":7,"s2":7,"s_k":[0,2,5],"sa":7,"safeti":[0,2,3],"safety_step_thresh":0,"sai":5,"same":[0,4,5,7],"sampl":7,"satisfi":[5,7],"save":[0,2,3,7],"save_diagnostic_info":[0,2],"save_poised":[0,2],"save_rk":[0,2],"save_xk":[0,2],"saw":2,"scale":[0,3,7],"scale_factor":0,"scale_factor_for_quit":0,"scaling_within_bound":7,"scipi":[3,5,6,7],"screen":0,"script":7,"search":[0,3,5],"section":[0,2,3,7],"see":[2,6,7],"seed":[3,7],"select":7,"self":7,"sens":5,"sensibl":7,"sep":4,"septemb":4,"serial":7,"serializ":7,"set":[2,3,4,5,7],"set_xlabel":7,"set_ylabel":7,"setup":[0,3],"sever":[0,5,7],"sfista":0,"shape":7,"shift":[0,7],"short":7,"should":[0,4,6,7],"show":7,"siam":[0,4,5,7],"side":[3,5],"sign":7,"similar":[5,7],"similarli":5,"simpl":[3,4,6],"simplex":7,"simpli":5,"simul":5,"sin":5,"sinc":[0,2,7],"singular":[0,7],"site":6,"situat":5,"size":[5,7],"slightli":[4,7],"slope":0,"slow":[2,4,7],"slow_it":2,"small":[4,5,7],"smaller":0,"smallest":[0,2],"smooth":0,"so":[0,2,3,4,7],"soft":[0,7],"softwar":[0,4,5,6,7],"soln":[2,3,7],"soln_dict":7,"solut":[3,4,5,6,7],"solv":[0,2,4],"solver":[0,3,4,5,7],"some":[0,5,6,7],"sourc":6,"space":[0,3,5],"spars":7,"specifi":[0,7],"sqrt":[4,7],"squar":[0,2,5],"stai":5,"stand":4,"standard":7,"start":[3,5,7],"stationar":0,"statu":7,"step":[0,2,3,5,7],"still":0,"stochast":[4,7],"stop":[0,3],"store":[0,3,7],"str":7,"string":7,"strongli":5,"structur":4,"subproblem":[0,3,5,6,7],"success":[0,2,7],"successfulli":7,"suffici":7,"suitabl":[5,7],"sum":[2,4,5,7],"sum_":[4,5,7],"supervis":4,"support":[3,4,6,7],"suppos":[5,7],"sure":[5,6],"svd_max_jac_cond":0,"svd_scale_factor":0,"sydnei":[],"system":[0,2,4,6],"t":[3,4,5,7],"t_i":7,"tabl":7,"take":[0,5,7],"taken":7,"task":5,"tdata":7,"technic":7,"techniqu":5,"term":[3,4,7],"termin":[2,3,4,7],"test":[4,7],"text":[0,2,4,5,7],"textbook":7,"than":[0,3,7],"thei":[0,5,7],"them":[3,5,7],"therefor":7,"thi":[0,2,3,4,5,6,7],"thresh_for_slow":0,"threshold":[0,7],"through":[0,3],"throw":0,"throw_error_on_nan":0,"tikhonov":[4,7],"time":[0,2,5,7],"to_csv":2,"to_dict":7,"toler":0,"toml":[3,6],"too":[3,7],"top":6,"total":[2,7],"tr_radiu":0,"tr_step":0,"train":4,"transact":[0,4,5,7],"trend":0,"trial":[3,5,7],"triangl":7,"triangular":3,"trigger":0,"troubl":7,"true":[0,2,5,7],"trust":[3,4,5,6,7],"trustregion":[3,6],"try":[0,4,5],"tupl":7,"turn":2,"two":[0,5],"type":[2,5,7],"typic":[4,5],"u":7,"ug":7,"uh":7,"uk":7,"unabl":7,"unconstrain":[3,7],"under":4,"underdetermin":5,"undetermin":3,"uninstal":4,"uniqu":7,"unit":7,"univers":1,"unknown":5,"unless":7,"unpack":6,"unsuccess":0,"updat":3,"upgrad":6,"upper":[3,7],"us":[0,2,3,4],"usag":[4,7],"use_full_rank_interp":0,"use_old_rk":0,"use_restart":0,"use_soft_restart":0,"user":[0,4,5,7],"user_param":[0,2,7],"usual":[0,7],"v":7,"v1":[3,7],"val1":7,"val2":7,"valu":[2,3,4,5,7],"vari":0,"variabl":7,"vast":5,"vdot":5,"vector":[0,2,3,5,7],"veri":[0,5,7],"version":[0,1,4,6,7],"via":7,"viewer":7,"violat":[4,7],"visibl":7,"w":7,"wa":[2,4,6,7],"wai":[0,5,7],"want":7,"warn":[3,7],"waterloo":1,"watson":7,"we":[0,2,5,7],"well":5,"were":7,"what":[0,2],"when":[0,3,4,7],"where":[0,5,7],"whether":[0,5,7],"which":[0,2,3,4,5,7],"while":[0,5],"whole":3,"why":7,"wide":7,"wise":7,"wish":[4,5,7],"within":[0,3,7],"without":[0,4],"work":6,"wors":7,"write":7,"written":6,"www":6,"x":[0,4,5,7],"x0":[0,2,3,7],"x1":7,"x2":7,"x3":7,"x_":[5,7],"x_0":[0,7],"x_1":[5,7],"x_2":[5,7],"x_b":0,"x_i":7,"x_j":7,"x_k":[0,5],"x_n":5,"xk":2,"xmin":7,"xmin_eval_num":[3,7],"xtol":7,"y":[5,7],"y_1":5,"y_i":[5,7],"y_k":[0,2],"y_m":5,"y_t":0,"yanjun":[0,1,5,7],"ydata":7,"yet":0,"you":[4,5,6,7],"your":[5,6,7],"zenodo":3,"zero":[0,3,7]},"titles":["Advanced Usage","Contributors","Diagnostic Information","Version History","DFO-LS: Derivative-Free Optimizer for Least-Squares Minimization","Overview","Installing DFO-LS","Using DFO-LS"],"titleterms":{"":0,"0":3,"1":3,"10":3,"11":3,"12":3,"13":3,"16":3,"2":3,"20":3,"2018":3,"2019":3,"2020":3,"2021":3,"2024":3,"2025":3,"26":3,"28":3,"29":3,"3":3,"30":3,"4":3,"5":3,"6":3,"8":3,"A":7,"acknowledg":4,"ad":7,"advanc":0,"algorithm":[0,2,5],"apr":3,"argument":7,"author":1,"bound":7,"check":0,"conda":6,"constraint":7,"content":4,"contributor":1,"convex":7,"count":2,"current":2,"data":7,"databas":7,"deriv":4,"detail":5,"dfo":[4,5,6,7],"diagnost":2,"dykstra":0,"dynam":0,"equat":[5,7],"estim":7,"evalu":7,"exampl":7,"feb":3,"fit":[5,7],"free":4,"gener":[0,7],"grow":0,"handl":0,"histori":3,"how":7,"inform":[0,2],"initi":[0,7],"instal":6,"interpol":[0,2],"iter":2,"jan":3,"jun":3,"l":[4,5,6,7],"least":[4,7],"log":0,"main":1,"manag":0,"manual":6,"matrix":0,"minim":[4,7],"model":[0,2],"more":7,"multipl":0,"nois":0,"noisi":7,"nonlinear":[5,7],"nov":3,"object":[0,7],"oct":3,"optim":4,"option":7,"output":[0,7],"overview":5,"paramet":[0,5,7],"pip":6,"point":0,"progress":[0,2],"rank":0,"refer":[0,5,7],"region":[0,2],"regress":0,"regular":[0,7],"requir":6,"restart":0,"sep":3,"set":0,"simpl":7,"slow":0,"small":0,"solv":[5,7],"squar":[4,7],"stochast":0,"system":[5,7],"termin":0,"test":6,"trust":[0,2],"uninstal":6,"us":[5,6,7],"usag":0,"valu":0,"version":3,"when":5}}) \ No newline at end of file diff --git a/docs/build/html/userguide.html b/docs/build/html/userguide.html index cb4220f..46abb97 100644 --- a/docs/build/html/userguide.html +++ b/docs/build/html/userguide.html @@ -1,24 +1,22 @@ + + - Using DFO-LS — DFO-LS v1.5.4 documentation - - + Using DFO-LS — DFO-LS v1.6 documentation + + - - - - - - - - + + + + + + @@ -37,9 +35,6 @@ DFO-LS -
      - 1.5.4 -
      @@ -60,6 +55,7 @@
    • Adding Bounds and More Output
    • Adding General Convex Constraints
    • Adding a Regularizer
    • +
    • Using Initial Evaluation Database
    • Example: Noisy Objective Evaluation
    • Example: Parameter Estimation/Data Fitting
    • Example: Solving a Nonlinear System of Equations
    • @@ -124,6 +120,10 @@

      How to use DFO-LSobjfun is a Python function which takes an input \(x\in\mathbb{R}^n\) and returns the vector of residuals \([r_1(x)\: \cdots \: r_m(x)]\in\mathbb{R}^m\). Both the input and output of objfun must be one-dimensional NumPy arrays (i.e. with x.shape == (n,) and objfun(x).shape == (m,)).

      The input x0 is the starting point for the solver, and (where possible) should be set to be the best available estimate of the true solution \(x_{min}\in\mathbb{R}^n\). It should be specified as a one-dimensional NumPy array (i.e. with x0.shape == (n,)). As DFO-LS is a local solver, providing different values for x0 may cause it to return different solutions, with possibly different objective values.

      +

      In newer version of DFO-LS (v1.6 onwards), the input x0 may instead by an instance of a dfols.EvaluationDatabase, which stores a collection +of previously evaluated points and their associated vectors of residuals. One of these points is designated the starting point for the solver, and the other +points may be used by DFO-LS to build its first approximation to objfun, reducing the number of evaluations required to begin the main iteration. +See the example below for more details for how to use this functionality.

      The output of dfols.solve is an object containing:

  • +
    +

    Using Initial Evaluation Database

    +

    Since DFO-LS v1.6, the input x0 may instead be an instance of a dfols.EvaluationDatabase class containing a collection of previously evaluated +points and their associated vectors of residuals. One of these points must be flagged as the starting point for the solver (otherwise, the most recently added +point is used). DFO-LS will automaticaly select some (but possibly none/all) of the other points to help build its first internal approximation to the objective, +which reduces the number of times the objective must be evaluated during the initialization phase, before the main algorithm can begin.

    +

    For example, suppose we want to use DFO-LS to minimize the Watson test function (Problem 20 from [MGH1981]). Using the standard starting point, our code looks like

    +
    +
    import numpy as np
    +import dfols
    +
    +# Define the objective function
    +def watson(x):
    +    n = len(x)
    +    m = 31
    +    fvec = np.zeros((m,), dtype=float)
    +    for i in range(1, 30):  # i=1,...,29
    +        div = float(i) / 29.0
    +        s1 = 0.0
    +        dx = 1.0
    +        for j in range(2, n + 1):  # j = 2,...,n
    +            s1 = s1 + (j - 1) * dx * x[j - 1]
    +            dx = div * dx
    +        s2 = 0.0
    +        dx = 1.0
    +        for j in range(1, n + 1):  # j = 1,...,n
    +            s2 = s2 + dx * x[j - 1]
    +            dx = div * dx
    +        fvec[i - 1] = s1 - s2 ** 2 - 1.0
    +    fvec[29] = x[0]
    +    fvec[30] = x[1] - x[0] ** 2 - 1.0
    +    return fvec
    +
    +# Define the starting point
    +n = 6
    +x0 = 0.5 * np.ones((n,), dtype=float)
    +
    +# Show extra output to demonstrate the impact of using an initial evaluation database
    +import logging
    +logging.basicConfig(level=logging.INFO, format='%(message)s')
    +
    +# Call DFO-LS
    +soln = dfols.solve(watson, x0)
    +
    +# Display output
    +print(soln)
    +
    +
    +
    +

    In the output of this code, we can check that DFO-LS finds the unique minimizer of this function. We can also see that before the main loop can begin, +DFO-LS needs to evaluate the objective at the given starting point, and 6 extra points (since this problem has 6 variables to be minimized):

    +
    +
    Function eval 1 at point 1 has obj = 16.4308311759923 at x = [...]
    +Initialising (coordinate directions)
    +Function eval 2 at point 2 has obj = 28.9196967094733 at x = [...]
    +Function eval 3 at point 3 has obj = 22.0866904737059 at x = [...]
    +Function eval 4 at point 4 has obj = 20.6560889343479 at x = [...]
    +Function eval 5 at point 5 has obj = 19.2914312375462 at x = [...]
    +Function eval 6 at point 6 has obj = 18.0373781384725 at x = [...]
    +Function eval 7 at point 7 has obj = 16.8946356501339 at x = [...]
    +Beginning main loop
    +Function eval 8 at point 8 has obj = 8.45207899459595 at x = [...]
    +Function eval 9 at point 9 has obj = 2.54949692496583 at x = [...]
    +...
    +Function eval 90 at point 90 has obj = 0.00228767005355292 at x = [...]
    +Did a total of 1 run(s)
    +
    +****** DFO-LS Results ******
    +Solution xmin = [-0.01572509  1.01243487 -0.23299162  1.26043004 -1.51372886  0.99299641]
    +Not showing residual vector because it is too long; check self.resid
    +Objective value f(xmin) = 0.002287670054
    +Needed 90 objective evaluations (at 90 points)
    +Not showing approximate Jacobian because it is too long; check self.jacobian
    +Solution xmin was evaluation point 89
    +Approximate Jacobian formed using evaluation points [87 85 76 89 86 88 84]
    +Exit flag = 0
    +Success: rho has reached rhoend
    +****************************
    +
    +
    +
    +

    Instead of this, we can build a database of points where we have previously evaluated the objective, marking one of them as the starting point +for the algorithm. DFO-LS will then select some/all (but possibly none) of the other points and use them as initial evaluations, allowing it to begin +the main loop faster. In general, DFO-LS will select points that are:

    +
      +
    • Not too close/far from the selected starting point (relative to the initial trust-region radius, input rhobeg)

    • +
    • Not in similar directions (relative to the selected starting point) to other selected initial points. For example, if several points differ from +the selected starting point in only the first variable, at most one of these will be selected.

    • +
    +

    The following code demonstrates how an evaluation database may be constructed and given to DFO-LS:

    +
    +
    # Assuming numpy and dfols already imported, watson function already defined
    +
    +# Build a database of evaluations
    +eval_db = dfols.EvaluationDatabase()
    +
    +# Define the starting point and add it to the database
    +n = 6
    +x0 = 0.5 * np.ones((n,), dtype=float)
    +eval_db.append(x0, watson(x0), make_starting_eval=True)
    +# make_starting_eval=True --> use this point as the starting point for DFO-LS
    +
    +# Add other points to the database
    +# Note: x0, x1 and x2 are colinear, so at least one of x1 and x2 will not be included in the initial model
    +x1 = np.ones((n,), dtype=float)
    +x2 = np.zeros((n,), dtype=float)
    +x3 = np.arange(n).astype(float)
    +eval_db.append(x1, watson(x1))
    +eval_db.append(x2, watson(x2))
    +eval_db.append(x3, watson(x3))
    +
    +# Show extra output to demonstrate the impact of using an initial evaluation database
    +import logging
    +logging.basicConfig(level=logging.INFO, format='%(message)s')
    +
    +# Call DFO-LS
    +soln = dfols.solve(watson, x0)
    +
    +# Display output
    +print(soln)
    +
    +
    +
    +

    Running this code, we get the same (correct) answer but using fewer evaluations of the objective in the main call to dfols.solve(). +The logging information reveals that x0 was used as the starting point, and x1 and x3 were used to build the initial model. +This means that only 4 evaluations of the objective were required in the initialization phase.

    +
    +
    Using pre-existing evaluation 0 as starting point
    +Adding pre-existing evaluation 1 to initial model
    +Adding pre-existing evaluation 3 to initial model
    +Function eval 1 at point 1 has obj = 15.1910664616598 at x = [...]
    +Function eval 2 at point 2 has obj = 15.2288491702299 at x = [...]
    +Function eval 3 at point 3 has obj = 15.228054997542 at x = [...]
    +Function eval 4 at point 4 has obj = 15.3011037277481 at x = [...]
    +Beginning main loop
    +Function eval 5 at point 5 has obj = 13.5524099633802 at x = [...]
    +Function eval 6 at point 6 has obj = 7.33371957636104 at x = [...]
    +...
    +Function eval 81 at point 81 has obj = 0.00228767005355266 at x = [...]
    +Did a total of 1 run(s)
    +
    +****** DFO-LS Results ******
    +Solution xmin = [-0.01572509  1.01243487 -0.23299163  1.26043009 -1.51372893  0.99299643]
    +Not showing residual vector because it is too long; check self.resid
    +Objective value f(xmin) = 0.002287670054
    +Needed 81 objective evaluations (at 81 points)
    +Not showing approximate Jacobian because it is too long; check self.jacobian
    +Solution xmin was evaluation point 77
    +Approximate Jacobian formed using evaluation points [76 73 79 74 77 75 80]
    +Exit flag = 0
    +Success: rho has reached rhoend
    +****************************
    +
    +
    +
    +

    Note that the indices of the evaluation database mentioned in the log refer to the order in which the points were added to the evaluation database.

    +

    Example: Noisy Objective Evaluation

    As described in Overview, derivative-free algorithms such as DFO-LS are particularly useful when objfun has noise. Let’s modify the previous example to include random noise in our objective evaluation, and compare it to SciPy’s derivative-based solver (the below results came from using SciPy v1.13.0):

    # DFO-LS example: minimize the noisy Rosenbrock function
    -from __future__ import print_function
    -import numpy as np
    -import dfols
    +from __future__ import print_function
    +import numpy as np
    +import dfols
     
     # Define the objective function
    -def rosenbrock(x):
    +def rosenbrock(x):
         return np.array([10.0 * (x[1] - x[0] ** 2), 1.0 - x[0]])
     
     # Modified objective function: add 1% Gaussian noise
    -def rosenbrock_noisy(x):
    +def rosenbrock_noisy(x):
         return rosenbrock(x) * (1.0 + 1e-2 * np.random.normal(size=(2,)))
     
     # Define the starting point
    @@ -534,7 +691,7 @@ 

    Example: Noisy Objective Evaluationprint(soln) # Compare with a derivative-based solver -import scipy.optimize as opt +import scipy.optimize as opt soln = opt.least_squares(rosenbrock_noisy, x0) print("") @@ -614,9 +771,9 @@

    Example: Parameter Estimation/Data Fitting
    # DFO-LS example: data fitting problem
     # Originally from:
     # https://uk.mathworks.com/help/optim/ug/lsqcurvefit.html
    -from __future__ import print_function
    -import numpy as np
    -import dfols
    +from __future__ import print_function
    +import numpy as np
    +import dfols
     
     # Observations
     tdata = np.array([0.9, 1.5, 13.8, 19.8, 24.1, 28.2, 35.2,
    @@ -625,7 +782,7 @@ 

    Example: Parameter Estimation/Data Fitting-0.4, -1.3, -1.5]) # Model is y(t) = x[0] * exp(x[1] * t) -def prediction_error(x): +def prediction_error(x): return ydata - x[0] * np.exp(x[1] * tdata) # Define the starting point @@ -669,14 +826,15 @@

    Example: Parameter Estimation/Data FittingData Fitting Results +Data Fitting Results +

    To generate this plot, run:

    +
    +[MGH1981] +

    Jorge J. More, Burton S. Garbow and Kenneth E. Hillstrom, Testing Unconstrained Optimization Software, ACM Transactions on Mathematical Software, 7:1 (1981), pp. 17-41.

    +

    diff --git a/docs/build/latex/DFOLS.aux b/docs/build/latex/DFOLS.aux index 98bc763..dd0a076 100755 --- a/docs/build/latex/DFOLS.aux +++ b/docs/build/latex/DFOLS.aux @@ -1,21 +1,7 @@ \relax -\providecommand\hyper@newdestlabel[2]{} \providecommand\babel@aux[2]{} \@nameuse{bbl@beforestart} -\providecommand\HyperFirstAtBeginDocument{\AtBeginDocument} -\HyperFirstAtBeginDocument{\ifx\hyper@anchor\@undefined -\global\let\oldcontentsline\contentsline -\gdef\contentsline#1#2#3#4{\oldcontentsline{#1}{#2}{#3}} -\global\let\oldnewlabel\newlabel -\gdef\newlabel#1#2{\newlabelxx{#1}#2} -\gdef\newlabelxx#1#2#3#4#5#6{\oldnewlabel{#1}{{#2}{#3}}} -\AtEndDocument{\ifx\hyper@anchor\@undefined -\let\contentsline\oldcontentsline -\let\newlabel\oldnewlabel -\fi} -\fi} -\global\let\hyper@last\relax -\gdef\HyperFirstAtBeginDocument#1{#1} +\providecommand\hyper@newdestlabel[2]{} \providecommand\HyField@AuxAddToFields[1]{} \providecommand\HyField@AuxAddToCoFields[2]{} \babel@aux{english}{} @@ -48,11 +34,11 @@ \newlabel{info:parameter-fitting}{{2.2}{5}{Parameter Fitting}{section.2.2}{}} \@writefile{toc}{\contentsline {section}{\numberline {2.3}Solving Nonlinear Systems of Equations}{6}{section.2.3}\protected@file@percent } \newlabel{info:solving-nonlinear-systems-of-equations}{{2.3}{6}{Solving Nonlinear Systems of Equations}{section.2.3}{}} +\@writefile{toc}{\contentsline {section}{\numberline {2.4}Details of the DFO\sphinxhyphen {}LS Algorithm}{6}{section.2.4}\protected@file@percent } +\newlabel{info:details-of-the-dfo-ls-algorithm}{{2.4}{6}{Details of the DFO\sphinxhyphen {}LS Algorithm}{section.2.4}{}} \citation{userguide:cfmr2018} \citation{userguide:hr2022} \citation{userguide:llr2024} -\@writefile{toc}{\contentsline {section}{\numberline {2.4}Details of the DFO\sphinxhyphen {}LS Algorithm}{7}{section.2.4}\protected@file@percent } -\newlabel{info:details-of-the-dfo-ls-algorithm}{{2.4}{7}{Details of the DFO\sphinxhyphen {}LS Algorithm}{section.2.4}{}} \@writefile{toc}{\contentsline {section}{\numberline {2.5}References}{7}{section.2.5}\protected@file@percent } \newlabel{info:references}{{2.5}{7}{References}{section.2.5}{}} \citation{userguide:cfmr2018} @@ -76,122 +62,127 @@ \citation{userguide:b2017} \@writefile{toc}{\contentsline {section}{\numberline {3.6}Adding General Convex Constraints}{15}{section.3.6}\protected@file@percent } \newlabel{userguide:adding-general-convex-constraints}{{3.6}{15}{Adding General Convex Constraints}{section.3.6}{}} +\citation{userguide:b2017} \@writefile{toc}{\contentsline {section}{\numberline {3.7}Adding a Regularizer}{16}{section.3.7}\protected@file@percent } \newlabel{userguide:adding-a-regularizer}{{3.7}{16}{Adding a Regularizer}{section.3.7}{}} -\citation{userguide:b2017} -\@writefile{toc}{\contentsline {section}{\numberline {3.8}Example: Noisy Objective Evaluation}{18}{section.3.8}\protected@file@percent } -\newlabel{userguide:example-noisy-objective-evaluation}{{3.8}{18}{Example: Noisy Objective Evaluation}{section.3.8}{}} -\@writefile{toc}{\contentsline {section}{\numberline {3.9}Example: Parameter Estimation/Data Fitting}{20}{section.3.9}\protected@file@percent } -\newlabel{userguide:example-parameter-estimation-data-fitting}{{3.9}{20}{Example: Parameter Estimation/Data Fitting}{section.3.9}{}} -\@writefile{toc}{\contentsline {section}{\numberline {3.10}Example: Solving a Nonlinear System of Equations}{22}{section.3.10}\protected@file@percent } -\newlabel{userguide:example-solving-a-nonlinear-system-of-equations}{{3.10}{22}{Example: Solving a Nonlinear System of Equations}{section.3.10}{}} -\@writefile{toc}{\contentsline {section}{\numberline {3.11}References}{23}{section.3.11}\protected@file@percent } -\newlabel{userguide:references}{{3.11}{23}{References}{section.3.11}{}} +\citation{userguide:mgh1981} +\@writefile{toc}{\contentsline {section}{\numberline {3.8}Using Initial Evaluation Database}{18}{section.3.8}\protected@file@percent } +\newlabel{userguide:using-initial-evaluation-database}{{3.8}{18}{Using Initial Evaluation Database}{section.3.8}{}} +\@writefile{toc}{\contentsline {section}{\numberline {3.9}Example: Noisy Objective Evaluation}{21}{section.3.9}\protected@file@percent } +\newlabel{userguide:example-noisy-objective-evaluation}{{3.9}{21}{Example: Noisy Objective Evaluation}{section.3.9}{}} +\@writefile{toc}{\contentsline {section}{\numberline {3.10}Example: Parameter Estimation/Data Fitting}{23}{section.3.10}\protected@file@percent } +\newlabel{userguide:example-parameter-estimation-data-fitting}{{3.10}{23}{Example: Parameter Estimation/Data Fitting}{section.3.10}{}} +\@writefile{toc}{\contentsline {section}{\numberline {3.11}Example: Solving a Nonlinear System of Equations}{25}{section.3.11}\protected@file@percent } +\newlabel{userguide:example-solving-a-nonlinear-system-of-equations}{{3.11}{25}{Example: Solving a Nonlinear System of Equations}{section.3.11}{}} +\@writefile{toc}{\contentsline {section}{\numberline {3.12}References}{26}{section.3.12}\protected@file@percent } +\newlabel{userguide:references}{{3.12}{26}{References}{section.3.12}{}} \citation{userguide:cfmr2018} \citation{userguide:hr2022} \citation{userguide:llr2024} -\@writefile{toc}{\contentsline {chapter}{\numberline {4}Advanced Usage}{25}{chapter.4}\protected@file@percent } +\@writefile{toc}{\contentsline {chapter}{\numberline {4}Advanced Usage}{27}{chapter.4}\protected@file@percent } \@writefile{lof}{\addvspace {10\p@ }} \@writefile{lot}{\addvspace {10\p@ }} -\newlabel{advanced:advanced-usage}{{4}{25}{Advanced Usage}{chapter.4}{}} -\newlabel{advanced::doc}{{4}{25}{Advanced Usage}{chapter.4}{}} -\@writefile{toc}{\contentsline {section}{\numberline {4.1}General Algorithm Parameters}{25}{section.4.1}\protected@file@percent } -\newlabel{advanced:general-algorithm-parameters}{{4.1}{25}{General Algorithm Parameters}{section.4.1}{}} -\@writefile{toc}{\contentsline {section}{\numberline {4.2}Logging and Output}{25}{section.4.2}\protected@file@percent } -\newlabel{advanced:logging-and-output}{{4.2}{25}{Logging and Output}{section.4.2}{}} -\@writefile{toc}{\contentsline {section}{\numberline {4.3}Initialization of Points}{26}{section.4.3}\protected@file@percent } -\newlabel{advanced:initialization-of-points}{{4.3}{26}{Initialization of Points}{section.4.3}{}} -\@writefile{toc}{\contentsline {section}{\numberline {4.4}Trust Region Management}{26}{section.4.4}\protected@file@percent } -\newlabel{advanced:trust-region-management}{{4.4}{26}{Trust Region Management}{section.4.4}{}} -\@writefile{toc}{\contentsline {section}{\numberline {4.5}Termination on Small Objective Value}{26}{section.4.5}\protected@file@percent } -\newlabel{advanced:termination-on-small-objective-value}{{4.5}{26}{Termination on Small Objective Value}{section.4.5}{}} -\@writefile{toc}{\contentsline {section}{\numberline {4.6}Termination on Slow Progress}{26}{section.4.6}\protected@file@percent } -\newlabel{advanced:termination-on-slow-progress}{{4.6}{26}{Termination on Slow Progress}{section.4.6}{}} -\@writefile{toc}{\contentsline {section}{\numberline {4.7}Stochastic Noise Information}{27}{section.4.7}\protected@file@percent } -\newlabel{advanced:stochastic-noise-information}{{4.7}{27}{Stochastic Noise Information}{section.4.7}{}} -\@writefile{toc}{\contentsline {section}{\numberline {4.8}Interpolation Management}{27}{section.4.8}\protected@file@percent } -\newlabel{advanced:interpolation-management}{{4.8}{27}{Interpolation Management}{section.4.8}{}} -\@writefile{toc}{\contentsline {section}{\numberline {4.9}Regression Model Management}{27}{section.4.9}\protected@file@percent } -\newlabel{advanced:regression-model-management}{{4.9}{27}{Regression Model Management}{section.4.9}{}} -\@writefile{toc}{\contentsline {section}{\numberline {4.10}Multiple Restarts}{27}{section.4.10}\protected@file@percent } -\newlabel{advanced:multiple-restarts}{{4.10}{27}{Multiple Restarts}{section.4.10}{}} -\@writefile{toc}{\contentsline {section}{\numberline {4.11}Dynamically Growing Initial Set}{28}{section.4.11}\protected@file@percent } -\newlabel{advanced:dynamically-growing-initial-set}{{4.11}{28}{Dynamically Growing Initial Set}{section.4.11}{}} -\@writefile{toc}{\contentsline {section}{\numberline {4.12}Dykstra’s Algorithm}{29}{section.4.12}\protected@file@percent } -\newlabel{advanced:dykstra-s-algorithm}{{4.12}{29}{Dykstra’s Algorithm}{section.4.12}{}} -\@writefile{toc}{\contentsline {section}{\numberline {4.13}Checking Matrix Rank}{29}{section.4.13}\protected@file@percent } -\newlabel{advanced:checking-matrix-rank}{{4.13}{29}{Checking Matrix Rank}{section.4.13}{}} -\@writefile{toc}{\contentsline {section}{\numberline {4.14}Handling regularizer}{29}{section.4.14}\protected@file@percent } -\newlabel{advanced:handling-regularizer}{{4.14}{29}{Handling regularizer}{section.4.14}{}} -\@writefile{toc}{\contentsline {section}{\numberline {4.15}References}{30}{section.4.15}\protected@file@percent } -\newlabel{advanced:references}{{4.15}{30}{References}{section.4.15}{}} -\@writefile{toc}{\contentsline {chapter}{\numberline {5}Diagnostic Information}{31}{chapter.5}\protected@file@percent } +\newlabel{advanced:advanced-usage}{{4}{27}{Advanced Usage}{chapter.4}{}} +\newlabel{advanced::doc}{{4}{27}{Advanced Usage}{chapter.4}{}} +\@writefile{toc}{\contentsline {section}{\numberline {4.1}General Algorithm Parameters}{27}{section.4.1}\protected@file@percent } +\newlabel{advanced:general-algorithm-parameters}{{4.1}{27}{General Algorithm Parameters}{section.4.1}{}} +\@writefile{toc}{\contentsline {section}{\numberline {4.2}Logging and Output}{27}{section.4.2}\protected@file@percent } +\newlabel{advanced:logging-and-output}{{4.2}{27}{Logging and Output}{section.4.2}{}} +\@writefile{toc}{\contentsline {section}{\numberline {4.3}Initialization of Points}{28}{section.4.3}\protected@file@percent } +\newlabel{advanced:initialization-of-points}{{4.3}{28}{Initialization of Points}{section.4.3}{}} +\@writefile{toc}{\contentsline {section}{\numberline {4.4}Trust Region Management}{28}{section.4.4}\protected@file@percent } +\newlabel{advanced:trust-region-management}{{4.4}{28}{Trust Region Management}{section.4.4}{}} +\@writefile{toc}{\contentsline {section}{\numberline {4.5}Termination on Small Objective Value}{28}{section.4.5}\protected@file@percent } +\newlabel{advanced:termination-on-small-objective-value}{{4.5}{28}{Termination on Small Objective Value}{section.4.5}{}} +\@writefile{toc}{\contentsline {section}{\numberline {4.6}Termination on Slow Progress}{28}{section.4.6}\protected@file@percent } +\newlabel{advanced:termination-on-slow-progress}{{4.6}{28}{Termination on Slow Progress}{section.4.6}{}} +\@writefile{toc}{\contentsline {section}{\numberline {4.7}Stochastic Noise Information}{28}{section.4.7}\protected@file@percent } +\newlabel{advanced:stochastic-noise-information}{{4.7}{28}{Stochastic Noise Information}{section.4.7}{}} +\@writefile{toc}{\contentsline {section}{\numberline {4.8}Interpolation Management}{29}{section.4.8}\protected@file@percent } +\newlabel{advanced:interpolation-management}{{4.8}{29}{Interpolation Management}{section.4.8}{}} +\@writefile{toc}{\contentsline {section}{\numberline {4.9}Regression Model Management}{29}{section.4.9}\protected@file@percent } +\newlabel{advanced:regression-model-management}{{4.9}{29}{Regression Model Management}{section.4.9}{}} +\@writefile{toc}{\contentsline {section}{\numberline {4.10}Multiple Restarts}{29}{section.4.10}\protected@file@percent } +\newlabel{advanced:multiple-restarts}{{4.10}{29}{Multiple Restarts}{section.4.10}{}} +\@writefile{toc}{\contentsline {section}{\numberline {4.11}Dynamically Growing Initial Set}{30}{section.4.11}\protected@file@percent } +\newlabel{advanced:dynamically-growing-initial-set}{{4.11}{30}{Dynamically Growing Initial Set}{section.4.11}{}} +\@writefile{toc}{\contentsline {section}{\numberline {4.12}Dykstra’s Algorithm}{31}{section.4.12}\protected@file@percent } +\newlabel{advanced:dykstra-s-algorithm}{{4.12}{31}{Dykstra’s Algorithm}{section.4.12}{}} +\@writefile{toc}{\contentsline {section}{\numberline {4.13}Checking Matrix Rank}{31}{section.4.13}\protected@file@percent } +\newlabel{advanced:checking-matrix-rank}{{4.13}{31}{Checking Matrix Rank}{section.4.13}{}} +\@writefile{toc}{\contentsline {section}{\numberline {4.14}Handling regularizer}{31}{section.4.14}\protected@file@percent } +\newlabel{advanced:handling-regularizer}{{4.14}{31}{Handling regularizer}{section.4.14}{}} +\@writefile{toc}{\contentsline {section}{\numberline {4.15}References}{31}{section.4.15}\protected@file@percent } +\newlabel{advanced:references}{{4.15}{31}{References}{section.4.15}{}} +\@writefile{toc}{\contentsline {chapter}{\numberline {5}Diagnostic Information}{33}{chapter.5}\protected@file@percent } \@writefile{lof}{\addvspace {10\p@ }} \@writefile{lot}{\addvspace {10\p@ }} -\newlabel{diagnostic:diagnostic-information}{{5}{31}{Diagnostic Information}{chapter.5}{}} -\newlabel{diagnostic::doc}{{5}{31}{Diagnostic Information}{chapter.5}{}} -\@writefile{toc}{\contentsline {section}{\numberline {5.1}Current Iterate}{31}{section.5.1}\protected@file@percent } -\newlabel{diagnostic:current-iterate}{{5.1}{31}{Current Iterate}{section.5.1}{}} -\@writefile{toc}{\contentsline {section}{\numberline {5.2}Trust Region}{31}{section.5.2}\protected@file@percent } -\newlabel{diagnostic:trust-region}{{5.2}{31}{Trust Region}{section.5.2}{}} -\@writefile{toc}{\contentsline {section}{\numberline {5.3}Model Interpolation}{32}{section.5.3}\protected@file@percent } -\newlabel{diagnostic:model-interpolation}{{5.3}{32}{Model Interpolation}{section.5.3}{}} -\@writefile{toc}{\contentsline {section}{\numberline {5.4}Iteration Count}{32}{section.5.4}\protected@file@percent } -\newlabel{diagnostic:iteration-count}{{5.4}{32}{Iteration Count}{section.5.4}{}} -\@writefile{toc}{\contentsline {section}{\numberline {5.5}Algorithm Progress}{32}{section.5.5}\protected@file@percent } -\newlabel{diagnostic:algorithm-progress}{{5.5}{32}{Algorithm Progress}{section.5.5}{}} -\@writefile{toc}{\contentsline {chapter}{\numberline {6}Version History}{33}{chapter.6}\protected@file@percent } +\newlabel{diagnostic:diagnostic-information}{{5}{33}{Diagnostic Information}{chapter.5}{}} +\newlabel{diagnostic::doc}{{5}{33}{Diagnostic Information}{chapter.5}{}} +\@writefile{toc}{\contentsline {section}{\numberline {5.1}Current Iterate}{33}{section.5.1}\protected@file@percent } +\newlabel{diagnostic:current-iterate}{{5.1}{33}{Current Iterate}{section.5.1}{}} +\@writefile{toc}{\contentsline {section}{\numberline {5.2}Trust Region}{33}{section.5.2}\protected@file@percent } +\newlabel{diagnostic:trust-region}{{5.2}{33}{Trust Region}{section.5.2}{}} +\@writefile{toc}{\contentsline {section}{\numberline {5.3}Model Interpolation}{33}{section.5.3}\protected@file@percent } +\newlabel{diagnostic:model-interpolation}{{5.3}{33}{Model Interpolation}{section.5.3}{}} +\@writefile{toc}{\contentsline {section}{\numberline {5.4}Iteration Count}{34}{section.5.4}\protected@file@percent } +\newlabel{diagnostic:iteration-count}{{5.4}{34}{Iteration Count}{section.5.4}{}} +\@writefile{toc}{\contentsline {section}{\numberline {5.5}Algorithm Progress}{34}{section.5.5}\protected@file@percent } +\newlabel{diagnostic:algorithm-progress}{{5.5}{34}{Algorithm Progress}{section.5.5}{}} +\@writefile{toc}{\contentsline {chapter}{\numberline {6}Version History}{35}{chapter.6}\protected@file@percent } \@writefile{lof}{\addvspace {10\p@ }} \@writefile{lot}{\addvspace {10\p@ }} -\newlabel{history:version-history}{{6}{33}{Version History}{chapter.6}{}} -\newlabel{history::doc}{{6}{33}{Version History}{chapter.6}{}} -\@writefile{toc}{\contentsline {section}{\numberline {6.1}Version 1.0 (6 Feb 2018)}{33}{section.6.1}\protected@file@percent } -\newlabel{history:version-1-0-6-feb-2018}{{6.1}{33}{Version 1.0 (6 Feb 2018)}{section.6.1}{}} -\@writefile{toc}{\contentsline {section}{\numberline {6.2}Version 1.0.1 (20 Feb 2018)}{33}{section.6.2}\protected@file@percent } -\newlabel{history:version-1-0-1-20-feb-2018}{{6.2}{33}{Version 1.0.1 (20 Feb 2018)}{section.6.2}{}} -\@writefile{toc}{\contentsline {section}{\numberline {6.3}Version 1.0.2 (20 Jun 2018)}{33}{section.6.3}\protected@file@percent } -\newlabel{history:version-1-0-2-20-jun-2018}{{6.3}{33}{Version 1.0.2 (20 Jun 2018)}{section.6.3}{}} -\@writefile{toc}{\contentsline {section}{\numberline {6.4}Version 1.1 (16 Jan 2019)}{33}{section.6.4}\protected@file@percent } -\newlabel{history:version-1-1-16-jan-2019}{{6.4}{33}{Version 1.1 (16 Jan 2019)}{section.6.4}{}} -\@writefile{toc}{\contentsline {section}{\numberline {6.5}Version 1.1.1 (5 Apr 2019)}{34}{section.6.5}\protected@file@percent } -\newlabel{history:version-1-1-1-5-apr-2019}{{6.5}{34}{Version 1.1.1 (5 Apr 2019)}{section.6.5}{}} -\@writefile{toc}{\contentsline {section}{\numberline {6.6}Version 1.2 (12 Feb 2020)}{34}{section.6.6}\protected@file@percent } -\newlabel{history:version-1-2-12-feb-2020}{{6.6}{34}{Version 1.2 (12 Feb 2020)}{section.6.6}{}} -\@writefile{toc}{\contentsline {section}{\numberline {6.7}Version 1.2.1 (13 Feb 2020)}{34}{section.6.7}\protected@file@percent } -\newlabel{history:version-1-2-1-13-feb-2020}{{6.7}{34}{Version 1.2.1 (13 Feb 2020)}{section.6.7}{}} -\@writefile{toc}{\contentsline {section}{\numberline {6.8}Version 1.2.2 (26 Feb 2021)}{34}{section.6.8}\protected@file@percent } -\newlabel{history:version-1-2-2-26-feb-2021}{{6.8}{34}{Version 1.2.2 (26 Feb 2021)}{section.6.8}{}} -\@writefile{toc}{\contentsline {section}{\numberline {6.9}Version 1.2.3 (1 Jun 2021)}{34}{section.6.9}\protected@file@percent } -\newlabel{history:version-1-2-3-1-jun-2021}{{6.9}{34}{Version 1.2.3 (1 Jun 2021)}{section.6.9}{}} -\@writefile{toc}{\contentsline {section}{\numberline {6.10}Version 1.3.0 (8 Nov 2021)}{34}{section.6.10}\protected@file@percent } -\newlabel{history:version-1-3-0-8-nov-2021}{{6.10}{34}{Version 1.3.0 (8 Nov 2021)}{section.6.10}{}} -\@writefile{toc}{\contentsline {section}{\numberline {6.11}Version 1.4.0 (29 Jan 2024)}{35}{section.6.11}\protected@file@percent } -\newlabel{history:version-1-4-0-29-jan-2024}{{6.11}{35}{Version 1.4.0 (29 Jan 2024)}{section.6.11}{}} -\@writefile{toc}{\contentsline {section}{\numberline {6.12}Version 1.4.1 (11 Apr 2024)}{35}{section.6.12}\protected@file@percent } -\newlabel{history:version-1-4-1-11-apr-2024}{{6.12}{35}{Version 1.4.1 (11 Apr 2024)}{section.6.12}{}} -\@writefile{toc}{\contentsline {section}{\numberline {6.13}Version 1.5.0 (11 Sep 2024)}{35}{section.6.13}\protected@file@percent } -\newlabel{history:version-1-5-0-11-sep-2024}{{6.13}{35}{Version 1.5.0 (11 Sep 2024)}{section.6.13}{}} -\@writefile{toc}{\contentsline {section}{\numberline {6.14}Version 1.5.1 (10 Oct 2024)}{35}{section.6.14}\protected@file@percent } -\newlabel{history:version-1-5-1-10-oct-2024}{{6.14}{35}{Version 1.5.1 (10 Oct 2024)}{section.6.14}{}} -\@writefile{toc}{\contentsline {section}{\numberline {6.15}Version 1.5.2 (28 Oct 2024)}{35}{section.6.15}\protected@file@percent } -\newlabel{history:version-1-5-2-28-oct-2024}{{6.15}{35}{Version 1.5.2 (28 Oct 2024)}{section.6.15}{}} -\@writefile{toc}{\contentsline {section}{\numberline {6.16}Version 1.5.3 (30 Oct 2024)}{35}{section.6.16}\protected@file@percent } -\newlabel{history:version-1-5-3-30-oct-2024}{{6.16}{35}{Version 1.5.3 (30 Oct 2024)}{section.6.16}{}} -\@writefile{toc}{\contentsline {section}{\numberline {6.17}Version 1.5.4 (11 Feb 2025)}{35}{section.6.17}\protected@file@percent } -\newlabel{history:version-1-5-4-11-feb-2025}{{6.17}{35}{Version 1.5.4 (11 Feb 2025)}{section.6.17}{}} -\@writefile{toc}{\contentsline {chapter}{\numberline {7}Contributors}{37}{chapter.7}\protected@file@percent } +\newlabel{history:version-history}{{6}{35}{Version History}{chapter.6}{}} +\newlabel{history::doc}{{6}{35}{Version History}{chapter.6}{}} +\@writefile{toc}{\contentsline {section}{\numberline {6.1}Version 1.0 (6 Feb 2018)}{35}{section.6.1}\protected@file@percent } +\newlabel{history:version-1-0-6-feb-2018}{{6.1}{35}{Version 1.0 (6 Feb 2018)}{section.6.1}{}} +\@writefile{toc}{\contentsline {section}{\numberline {6.2}Version 1.0.1 (20 Feb 2018)}{35}{section.6.2}\protected@file@percent } +\newlabel{history:version-1-0-1-20-feb-2018}{{6.2}{35}{Version 1.0.1 (20 Feb 2018)}{section.6.2}{}} +\@writefile{toc}{\contentsline {section}{\numberline {6.3}Version 1.0.2 (20 Jun 2018)}{35}{section.6.3}\protected@file@percent } +\newlabel{history:version-1-0-2-20-jun-2018}{{6.3}{35}{Version 1.0.2 (20 Jun 2018)}{section.6.3}{}} +\@writefile{toc}{\contentsline {section}{\numberline {6.4}Version 1.1 (16 Jan 2019)}{35}{section.6.4}\protected@file@percent } +\newlabel{history:version-1-1-16-jan-2019}{{6.4}{35}{Version 1.1 (16 Jan 2019)}{section.6.4}{}} +\@writefile{toc}{\contentsline {section}{\numberline {6.5}Version 1.1.1 (5 Apr 2019)}{35}{section.6.5}\protected@file@percent } +\newlabel{history:version-1-1-1-5-apr-2019}{{6.5}{35}{Version 1.1.1 (5 Apr 2019)}{section.6.5}{}} +\@writefile{toc}{\contentsline {section}{\numberline {6.6}Version 1.2 (12 Feb 2020)}{35}{section.6.6}\protected@file@percent } +\newlabel{history:version-1-2-12-feb-2020}{{6.6}{35}{Version 1.2 (12 Feb 2020)}{section.6.6}{}} +\@writefile{toc}{\contentsline {section}{\numberline {6.7}Version 1.2.1 (13 Feb 2020)}{36}{section.6.7}\protected@file@percent } +\newlabel{history:version-1-2-1-13-feb-2020}{{6.7}{36}{Version 1.2.1 (13 Feb 2020)}{section.6.7}{}} +\@writefile{toc}{\contentsline {section}{\numberline {6.8}Version 1.2.2 (26 Feb 2021)}{36}{section.6.8}\protected@file@percent } +\newlabel{history:version-1-2-2-26-feb-2021}{{6.8}{36}{Version 1.2.2 (26 Feb 2021)}{section.6.8}{}} +\@writefile{toc}{\contentsline {section}{\numberline {6.9}Version 1.2.3 (1 Jun 2021)}{36}{section.6.9}\protected@file@percent } +\newlabel{history:version-1-2-3-1-jun-2021}{{6.9}{36}{Version 1.2.3 (1 Jun 2021)}{section.6.9}{}} +\@writefile{toc}{\contentsline {section}{\numberline {6.10}Version 1.3.0 (8 Nov 2021)}{36}{section.6.10}\protected@file@percent } +\newlabel{history:version-1-3-0-8-nov-2021}{{6.10}{36}{Version 1.3.0 (8 Nov 2021)}{section.6.10}{}} +\@writefile{toc}{\contentsline {section}{\numberline {6.11}Version 1.4.0 (29 Jan 2024)}{36}{section.6.11}\protected@file@percent } +\newlabel{history:version-1-4-0-29-jan-2024}{{6.11}{36}{Version 1.4.0 (29 Jan 2024)}{section.6.11}{}} +\@writefile{toc}{\contentsline {section}{\numberline {6.12}Version 1.4.1 (11 Apr 2024)}{36}{section.6.12}\protected@file@percent } +\newlabel{history:version-1-4-1-11-apr-2024}{{6.12}{36}{Version 1.4.1 (11 Apr 2024)}{section.6.12}{}} +\@writefile{toc}{\contentsline {section}{\numberline {6.13}Version 1.5.0 (11 Sep 2024)}{36}{section.6.13}\protected@file@percent } +\newlabel{history:version-1-5-0-11-sep-2024}{{6.13}{36}{Version 1.5.0 (11 Sep 2024)}{section.6.13}{}} +\@writefile{toc}{\contentsline {section}{\numberline {6.14}Version 1.5.1 (10 Oct 2024)}{36}{section.6.14}\protected@file@percent } +\newlabel{history:version-1-5-1-10-oct-2024}{{6.14}{36}{Version 1.5.1 (10 Oct 2024)}{section.6.14}{}} +\@writefile{toc}{\contentsline {section}{\numberline {6.15}Version 1.5.2 (28 Oct 2024)}{37}{section.6.15}\protected@file@percent } +\newlabel{history:version-1-5-2-28-oct-2024}{{6.15}{37}{Version 1.5.2 (28 Oct 2024)}{section.6.15}{}} +\@writefile{toc}{\contentsline {section}{\numberline {6.16}Version 1.5.3 (30 Oct 2024)}{37}{section.6.16}\protected@file@percent } +\newlabel{history:version-1-5-3-30-oct-2024}{{6.16}{37}{Version 1.5.3 (30 Oct 2024)}{section.6.16}{}} +\@writefile{toc}{\contentsline {section}{\numberline {6.17}Version 1.5.4 (11 Feb 2025)}{37}{section.6.17}\protected@file@percent } +\newlabel{history:version-1-5-4-11-feb-2025}{{6.17}{37}{Version 1.5.4 (11 Feb 2025)}{section.6.17}{}} +\@writefile{toc}{\contentsline {section}{\numberline {6.18}Version 1.6 (10 Sep 2025)}{37}{section.6.18}\protected@file@percent } +\newlabel{history:version-1-6-10-sep-2025}{{6.18}{37}{Version 1.6 (10 Sep 2025)}{section.6.18}{}} +\@writefile{toc}{\contentsline {chapter}{\numberline {7}Contributors}{39}{chapter.7}\protected@file@percent } \@writefile{lof}{\addvspace {10\p@ }} \@writefile{lot}{\addvspace {10\p@ }} -\newlabel{contributors:contributors}{{7}{37}{Contributors}{chapter.7}{}} -\newlabel{contributors::doc}{{7}{37}{Contributors}{chapter.7}{}} -\@writefile{toc}{\contentsline {section}{\numberline {7.1}Main author}{37}{section.7.1}\protected@file@percent } -\newlabel{contributors:main-author}{{7.1}{37}{Main author}{section.7.1}{}} -\@writefile{toc}{\contentsline {section}{\numberline {7.2}Contributors}{37}{section.7.2}\protected@file@percent } -\newlabel{contributors:id1}{{7.2}{37}{Contributors}{section.7.2}{}} -\@writefile{toc}{\contentsline {chapter}{\numberline {8}Acknowledgements}{39}{chapter.8}\protected@file@percent } +\newlabel{contributors:contributors}{{7}{39}{Contributors}{chapter.7}{}} +\newlabel{contributors::doc}{{7}{39}{Contributors}{chapter.7}{}} +\@writefile{toc}{\contentsline {section}{\numberline {7.1}Main author}{39}{section.7.1}\protected@file@percent } +\newlabel{contributors:main-author}{{7.1}{39}{Main author}{section.7.1}{}} +\@writefile{toc}{\contentsline {section}{\numberline {7.2}Contributors}{39}{section.7.2}\protected@file@percent } +\newlabel{contributors:id1}{{7.2}{39}{Contributors}{section.7.2}{}} +\@writefile{toc}{\contentsline {chapter}{\numberline {8}Acknowledgements}{41}{chapter.8}\protected@file@percent } \@writefile{lof}{\addvspace {10\p@ }} \@writefile{lot}{\addvspace {10\p@ }} -\newlabel{index:acknowledgements}{{8}{39}{Acknowledgements}{chapter.8}{}} +\newlabel{index:acknowledgements}{{8}{41}{Acknowledgements}{chapter.8}{}} \bibcite{info:cfmr2018}{CFMR2018} \bibcite{info:hr2022}{HR2022} \bibcite{info:llr2024}{LLR2024} @@ -199,8 +190,9 @@ \bibcite{userguide:hr2022}{HR2022} \bibcite{userguide:llr2024}{LLR2024} \bibcite{userguide:b2017}{B2017} +\bibcite{userguide:mgh1981}{MGH1981} \bibcite{advanced:cfmr2018}{CFMR2018} \bibcite{advanced:hr2022}{HR2022} \bibcite{advanced:llr2024}{LLR2024} -\@writefile{toc}{\contentsline {chapter}{Bibliography}{41}{chapter*.3}\protected@file@percent } -\gdef \@abspage@last{45} +\@writefile{toc}{\contentsline {chapter}{Bibliography}{43}{chapter*.3}\protected@file@percent } +\gdef \@abspage@last{47} diff --git a/docs/build/latex/DFOLS.fdb_latexmk b/docs/build/latex/DFOLS.fdb_latexmk index 5218e3c..4054529 100755 --- a/docs/build/latex/DFOLS.fdb_latexmk +++ b/docs/build/latex/DFOLS.fdb_latexmk @@ -1,11 +1,12 @@ -# Fdb version 3 -["makeindex DFOLS.idx"] 1712813974 "DFOLS.idx" "DFOLS.ind" "DFOLS" 1739235803 - "DFOLS.idx" 1739235801 0 d41d8cd98f00b204e9800998ecf8427e "pdflatex" +# Fdb version 4 +["makeindex DFOLS.idx"] 1757469788.65669 "DFOLS.idx" "DFOLS.ind" "DFOLS" 1757469881.22989 0 + "DFOLS.idx" 1757469880.38986 0 d41d8cd98f00b204e9800998ecf8427e "pdflatex" (generated) "DFOLS.ilg" "DFOLS.ind" -["pdflatex"] 1739235797 "DFOLS.tex" "DFOLS.pdf" "DFOLS" 1739235803 - "/etc/texmf/web2c/texmf.cnf" 1712803173 475 c0e671620eb5563b2130f56340a5fde8 "" + (rewritten before read) +["pdflatex"] 1757469879.71993 "DFOLS.tex" "DFOLS.pdf" "DFOLS" 1757469881.23006 0 + "/etc/texmf/web2c/texmf.cnf" 1751718225.68065 475 c0e671620eb5563b2130f56340a5fde8 "" "/usr/share/texlive/texmf-dist/fonts/enc/dvips/base/8r.enc" 1165713224 4850 80dc9bab7f31fb78a000ccfed0e27cab "" "/usr/share/texlive/texmf-dist/fonts/map/fontname/texfonts.map" 1577235249 3524 cb3e574dea2d1052e39280babc910dc8 "" "/usr/share/texlive/texmf-dist/fonts/tfm/jknappen/ec/ecrm1000.tfm" 1136768653 3584 adb004a0c8e7c46ee66cad73671f37b4 "" @@ -49,19 +50,19 @@ "/usr/share/texlive/texmf-dist/tex/context/base/mkii/supp-pdf.mkii" 1461363279 71627 94eb9990bed73c364d7f53f960cc8c5b "" "/usr/share/texlive/texmf-dist/tex/generic/atbegshi/atbegshi.sty" 1575674566 24708 5584a51a7101caf7e6bbf1fc27d8f7b1 "" "/usr/share/texlive/texmf-dist/tex/generic/babel-english/english.ldf" 1496785618 7008 9ff5fdcc865b01beca2b0fe4a46231d4 "" - "/usr/share/texlive/texmf-dist/tex/generic/babel/babel.sty" 1643231327 147419 2058c0f5e6893b19c8f3ce95d177646c "" - "/usr/share/texlive/texmf-dist/tex/generic/babel/txtbabel.def" 1643231327 5233 d5e383ed66bf272b71b1a90b596e21c6 "" + "/usr/share/texlive/texmf-dist/tex/generic/babel/babel.sty" 1704662920 150008 7a05b0fdc0167c04e192003e780ab195 "" + "/usr/share/texlive/texmf-dist/tex/generic/babel/locale/en/babel-en.ini" 1661803479 3966 caeee5a9e5771d4446aa1ca9015ba1b2 "" + "/usr/share/texlive/texmf-dist/tex/generic/babel/locale/en/babel-english.tex" 1498512262 336 ed676b5e7dfd862bc78d634f6a973f37 "" + "/usr/share/texlive/texmf-dist/tex/generic/babel/txtbabel.def" 1704662920 6948 df63e25be1d2bc35bbad5a0141f41348 "" "/usr/share/texlive/texmf-dist/tex/generic/bigintcalc/bigintcalc.sty" 1576625341 40635 c40361e206be584d448876bba8a64a3b "" "/usr/share/texlive/texmf-dist/tex/generic/bitset/bitset.sty" 1576016050 33961 6b5c75130e435b2bfdb9f480a09a39f9 "" - "/usr/share/texlive/texmf-dist/tex/generic/etexcmds/etexcmds.sty" 1576625273 7734 b98cbb34c81f667027c1e3ebdbfce34b "" "/usr/share/texlive/texmf-dist/tex/generic/gettitlestring/gettitlestring.sty" 1576625223 8371 9d55b8bd010bc717624922fb3477d92e "" - "/usr/share/texlive/texmf-dist/tex/generic/iftex/iftex.sty" 1583617216 6501 4011d89d9621e0b0901138815ba5ff29 "" + "/usr/share/texlive/texmf-dist/tex/generic/iftex/iftex.sty" 1644112042 7237 bdd120a32c8fdb4b433cf9ca2e7cd98a "" "/usr/share/texlive/texmf-dist/tex/generic/iftex/ifvtex.sty" 1572645307 1057 525c2192b5febbd8c1f662c9468335bb "" "/usr/share/texlive/texmf-dist/tex/generic/infwarerr/infwarerr.sty" 1575499628 8356 7bbb2c2373aa810be568c29e333da8ed "" "/usr/share/texlive/texmf-dist/tex/generic/intcalc/intcalc.sty" 1576625065 31769 002a487f55041f8e805cfbf6385ffd97 "" "/usr/share/texlive/texmf-dist/tex/generic/kvdefinekeys/kvdefinekeys.sty" 1576878844 5412 d5a2436094cd7be85769db90f29250a6 "" - "/usr/share/texlive/texmf-dist/tex/generic/kvsetkeys/kvsetkeys.sty" 1576624944 13807 952b0226d4efca026f0e19dd266dcc22 "" - "/usr/share/texlive/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty" 1600895880 17859 4409f8f50cd365c68e684407e5350b1b "" + "/usr/share/texlive/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty" 1701727651 17865 1a9bd36b4f98178fa551aca822290953 "" "/usr/share/texlive/texmf-dist/tex/generic/pdfescape/pdfescape.sty" 1576015897 19007 15924f7228aca6c6d184b115f4baa231 "" "/usr/share/texlive/texmf-dist/tex/generic/pdftexcmds/pdftexcmds.sty" 1593379760 20089 80423eac55aa175305d35b49e04fe23b "" "/usr/share/texlive/texmf-dist/tex/generic/uniquecounter/uniquecounter.sty" 1576624663 7008 f92eaa0a3872ed622bbf538217cd2ab7 "" @@ -69,53 +70,61 @@ "/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amssymb.sty" 1359763108 13829 94730e64147574077f8ecfea9bb69af4 "" "/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsa.fd" 1359763108 961 6518c6525a34feb5e8250ffa91731cff "" "/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsb.fd" 1359763108 961 d02606146ba5601b5645f987c92e6193 "" - "/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsbsy.sty" 1622667781 2222 da905dc1db75412efd2d8f67739f0596 "" - "/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsgen.sty" 1622667781 4173 bc0410bcccdff806d6132d3c1ef35481 "" - "/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsmath.sty" 1636758526 87648 07fbb6e9169e00cb2a2f40b31b2dbf3c "" - "/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsopn.sty" 1636758526 4128 8eea906621b6639f7ba476a472036bbe "" - "/usr/share/texlive/texmf-dist/tex/latex/amsmath/amstext.sty" 1636758526 2444 926f379cc60fcf0c6e3fee2223b4370d "" + "/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsbsy.sty" 1686341992 2222 499d61426192c39efd8f410ee1a52b9c "" + "/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsgen.sty" 1686341992 4173 82ac04dfb1256038fad068287fbb4fe6 "" + "/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsmath.sty" 1686341992 88371 d84032c0f422c3d1e282266c01bef237 "" + "/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsopn.sty" 1686341992 4474 b811654f4bf125f11506d13d13647efb "" + "/usr/share/texlive/texmf-dist/tex/latex/amsmath/amstext.sty" 1686341992 2444 0d0c1ee65478277e8015d65b86983da2 "" "/usr/share/texlive/texmf-dist/tex/latex/atveryend/atveryend.sty" 1576191570 19336 ce7ae9438967282886b3b036cfad1e4d "" "/usr/share/texlive/texmf-dist/tex/latex/auxhook/auxhook.sty" 1576625391 3935 57aa3c3e203a5c2effb4d2bd2efbc323 "" - "/usr/share/texlive/texmf-dist/tex/latex/base/alltt.sty" 1622581934 3137 2366459cfce784001c7405ed16a872fb "" - "/usr/share/texlive/texmf-dist/tex/latex/base/atbegshi-ltx.sty" 1636758526 3034 3bfb87122e6fa8758225c0dd3cbaceba "" - "/usr/share/texlive/texmf-dist/tex/latex/base/atveryend-ltx.sty" 1636758526 2462 754d6b31b2ab5a09bb72c348ace2ec75 "" - "/usr/share/texlive/texmf-dist/tex/latex/base/fontenc.sty" 1622581934 4946 461cc78f6f26901410d9f1d725079cc6 "" - "/usr/share/texlive/texmf-dist/tex/latex/base/inputenc.sty" 1622581934 5049 969aec05d5f39c43f8005910498fcf90 "" - "/usr/share/texlive/texmf-dist/tex/latex/base/makeidx.sty" 1636758526 1939 e44505a18ba4edebb8b70993e32c6350 "" - "/usr/share/texlive/texmf-dist/tex/latex/base/report.cls" 1636758526 23203 8fbc410e29d3fd675970d5f9698c9c11 "" - "/usr/share/texlive/texmf-dist/tex/latex/base/size10.clo" 1636758526 8448 96f18c76bf608a36ee6fbf021ac1dd32 "" - "/usr/share/texlive/texmf-dist/tex/latex/base/textcomp.sty" 1622581934 2894 55431114fc0e491ecee275edafd6c881 "" + "/usr/share/texlive/texmf-dist/tex/latex/base/alltt.sty" 1705352648 3137 080666101e6db698c7daf04c95abb706 "" + "/usr/share/texlive/texmf-dist/tex/latex/base/atbegshi-ltx.sty" 1705352648 3045 273c666a54e60b9f730964f431a56c1b "" + "/usr/share/texlive/texmf-dist/tex/latex/base/atveryend-ltx.sty" 1705352648 2462 6bc53756156dbd71c1ad550d30a3b93f "" + "/usr/share/texlive/texmf-dist/tex/latex/base/fontenc.sty" 1705352648 5119 a04a8b68ab4f6ce800a41f7f8012a10e "" + "/usr/share/texlive/texmf-dist/tex/latex/base/inputenc.sty" 1705352648 5048 425739d70251273bf93e3d51f3c40048 "" + "/usr/share/texlive/texmf-dist/tex/latex/base/makeidx.sty" 1705352648 1939 3225e20a81cec31e51c1e216d6385103 "" + "/usr/share/texlive/texmf-dist/tex/latex/base/report.cls" 1705352648 23203 f5d913095ece2233436f0e628619cd37 "" + "/usr/share/texlive/texmf-dist/tex/latex/base/size10.clo" 1705352648 8448 dbc0dbf4156c0bb9ba01a1c685d3bad0 "" + "/usr/share/texlive/texmf-dist/tex/latex/base/textcomp.sty" 1705352648 2894 fc64867f9d198785eabe71a88276a9cb "" "/usr/share/texlive/texmf-dist/tex/latex/booktabs/booktabs.sty" 1579038678 6078 f1cb470c9199e7110a27851508ed7a5c "" "/usr/share/texlive/texmf-dist/tex/latex/capt-of/capt-of.sty" 1264379041 1311 063f8536a047a2d9cb1803321f793f37 "" "/usr/share/texlive/texmf-dist/tex/latex/cmap/cmap.sty" 1612650595 3574 ddc11a0ae1c579d351ed20d2319ad422 "" "/usr/share/texlive/texmf-dist/tex/latex/cmap/ot1.cmap" 1177721415 1207 4e0d96772f0d338847cbfb4eca683c81 "" "/usr/share/texlive/texmf-dist/tex/latex/cmap/t1.cmap" 1215522782 1938 beaa4a8467aa0074076e0e19f2992e29 "" - "/usr/share/texlive/texmf-dist/tex/latex/colortbl/colortbl.sty" 1579991017 10793 d0af3aa11e27ae35ba4685b17597b122 "" + "/usr/share/texlive/texmf-dist/tex/latex/colortbl/colortbl.sty" 1659300143 12441 3b2a708337608012a865c7d9b7f05d28 "" "/usr/share/texlive/texmf-dist/tex/latex/ellipse/ellipse.sty" 1449445679 9937 7eb94c47265a0108f7a319db3c3b58b0 "" "/usr/share/texlive/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty" 1579991033 13886 d1306dcf79a944f6988e688c1785f9ce "" - "/usr/share/texlive/texmf-dist/tex/latex/fancyhdr/fancyhdr.sty" 1612734021 17086 7ed8cbc4d361ec87392817e0dd4f65ec "" - "/usr/share/texlive/texmf-dist/tex/latex/fancyvrb/fancyvrb.sty" 1640123156 44023 c6f2f55a2bb9630fba10bfd488a5addd "" + "/usr/share/texlive/texmf-dist/tex/latex/etoolbox/etoolbox.sty" 1601931149 46845 3b58f70c6e861a13d927bff09d35ecbc "" + "/usr/share/texlive/texmf-dist/tex/latex/fancyhdr/fancyhdr.sty" 1668028059 18450 88279bf67c81e69f8e3f1c1bad1a26c5 "" + "/usr/share/texlive/texmf-dist/tex/latex/fancyvrb/fancyvrb.sty" 1705955721 43712 c3d93734f3bc56e03c21b3dc69268d3c "" "/usr/share/texlive/texmf-dist/tex/latex/float/float.sty" 1137110151 6749 16d2656a1984957e674b149555f1ea1d "" "/usr/share/texlive/texmf-dist/tex/latex/fncychap/fncychap.sty" 1292029257 19488 fdd52eb173b3197d748e1ec25acb042f "" + "/usr/share/texlive/texmf-dist/tex/latex/fontawesome5/fontawesome5-generic-helper.sty" 1651520503 1796 6d3390e7a3f2a0f63ce89532aa30ac20 "" + "/usr/share/texlive/texmf-dist/tex/latex/fontawesome5/fontawesome5-mapping.def" 1651520503 107808 07e47606922c76b1824e149c54155c4c "" + "/usr/share/texlive/texmf-dist/tex/latex/fontawesome5/fontawesome5.sty" 1651520503 8112 16dbb19fca3f2df864fea49874356f35 "" "/usr/share/texlive/texmf-dist/tex/latex/framed/framed.sty" 1338588508 22449 7ec15c16d0d66790f28e90343c5434a3 "" "/usr/share/texlive/texmf-dist/tex/latex/geometry/geometry.sty" 1578002852 41601 9cf6c5257b1bc7af01a58859749dd37a "" "/usr/share/texlive/texmf-dist/tex/latex/graphics-cfg/color.cfg" 1459978653 1213 620bba36b25224fa9b7e1ccb4ecb76fd "" "/usr/share/texlive/texmf-dist/tex/latex/graphics-cfg/graphics.cfg" 1465944070 1224 978390e9c2234eab29404bc21b268d1e "" - "/usr/share/texlive/texmf-dist/tex/latex/graphics-def/pdftex.def" 1601931164 19103 48d29b6e2a64cb717117ef65f107b404 "" - "/usr/share/texlive/texmf-dist/tex/latex/graphics/color.sty" 1639603921 7197 eb6c1ebf41667a05cb50c23c19d5e8bc "" - "/usr/share/texlive/texmf-dist/tex/latex/graphics/graphics.sty" 1622581934 18399 7e40f80366dffb22c0e7b70517db5cb4 "" - "/usr/share/texlive/texmf-dist/tex/latex/graphics/graphicx.sty" 1636758526 7996 a8fb260d598dcaf305a7ae7b9c3e3229 "" - "/usr/share/texlive/texmf-dist/tex/latex/graphics/keyval.sty" 1622581934 2671 4de6781a30211fe0ea4c672e4a2a8166 "" - "/usr/share/texlive/texmf-dist/tex/latex/graphics/trig.sty" 1636758526 4009 187ea2dc3194cd5a76cd99a8d7a6c4d0 "" + "/usr/share/texlive/texmf-dist/tex/latex/graphics-def/pdftex.def" 1663965824 19448 1e988b341dda20961a6b931bcde55519 "" + "/usr/share/texlive/texmf-dist/tex/latex/graphics/color.sty" 1654720880 7233 e46ce9241d2b2ca2a78155475fdd557a "" + "/usr/share/texlive/texmf-dist/tex/latex/graphics/graphics.sty" 1654720880 18387 8f900a490197ebaf93c02ae9476d4b09 "" + "/usr/share/texlive/texmf-dist/tex/latex/graphics/graphicx.sty" 1654720880 8010 a8d949cbdbc5c983593827c9eec252e1 "" + "/usr/share/texlive/texmf-dist/tex/latex/graphics/keyval.sty" 1654720880 2671 7e67d78d9b88c845599a85b2d41f2e39 "" + "/usr/share/texlive/texmf-dist/tex/latex/graphics/mathcolor.ltx" 1667332637 2885 9c645d672ae17285bba324998918efd8 "" + "/usr/share/texlive/texmf-dist/tex/latex/graphics/trig.sty" 1654720880 4023 293ea1c16429fc0c4cf605f4da1791a9 "" "/usr/share/texlive/texmf-dist/tex/latex/hycolor/hycolor.sty" 1580250785 17914 4c28a13fc3d975e6e81c9bea1d697276 "" - "/usr/share/texlive/texmf-dist/tex/latex/hyperref/hpdftex.def" 1623096352 49890 0bb76a5b745d92e86aed6f3f93e334f0 "" - "/usr/share/texlive/texmf-dist/tex/latex/hyperref/hyperref-langpatches.def" 1623096352 1777 940b1aa83773bc035eb882e8d6842769 "" - "/usr/share/texlive/texmf-dist/tex/latex/hyperref/hyperref.sty" 1623096352 230915 97a8817f13de4e61bbc3592cb2caa995 "" - "/usr/share/texlive/texmf-dist/tex/latex/hyperref/nameref.sty" 1612734870 13242 133e617c5eebffdd05e421624022b267 "" - "/usr/share/texlive/texmf-dist/tex/latex/hyperref/pd1enc.def" 1623096352 14132 c9404e8e78123ef0d1007c34d1d6da51 "" - "/usr/share/texlive/texmf-dist/tex/latex/hyperref/puenc.def" 1623096352 117004 86586f287ddfad919a0a4bd68934277a "" - "/usr/share/texlive/texmf-dist/tex/latex/kvoptions/kvoptions.sty" 1602274869 22521 d2fceb764a442a2001d257ef11db7618 "" - "/usr/share/texlive/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def" 1642022539 29921 f0f4f870357ebfb8fe58ed9ed4ee9b92 "" + "/usr/share/texlive/texmf-dist/tex/latex/hyperref/hpdftex.def" 1705871765 48154 e46bf8adeb936500541441171d61726d "" + "/usr/share/texlive/texmf-dist/tex/latex/hyperref/hyperref.sty" 1705871765 220920 fd3cbb5f1a2bc9b8f451b8b7d8171264 "" + "/usr/share/texlive/texmf-dist/tex/latex/hyperref/nameref.sty" 1705871765 11026 182c63f139a71afd30a28e5f1ed2cd1c "" + "/usr/share/texlive/texmf-dist/tex/latex/hyperref/pd1enc.def" 1705871765 14249 e67cb186717b7ab18d14a4875e7e98b5 "" + "/usr/share/texlive/texmf-dist/tex/latex/hyperref/puenc.def" 1705871765 117112 05831178ece2cad4d9629dcf65099b11 "" + "/usr/share/texlive/texmf-dist/tex/latex/kvoptions/kvoptions.sty" 1655478651 22555 6d8e155cfef6d82c3d5c742fea7c992e "" + "/usr/share/texlive/texmf-dist/tex/latex/kvsetkeys/kvsetkeys.sty" 1665067230 13815 760b0c02f691ea230f5359c4e1de23a7 "" + "/usr/share/texlive/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def" 1704491087 30006 57b07afb710ee2f649c65cfbafda39c1 "" + "/usr/share/texlive/texmf-dist/tex/latex/l3kernel/expl3.sty" 1705955748 6565 cfd9fd0a1d5f5ad985151778771ff7a9 "" + "/usr/share/texlive/texmf-dist/tex/latex/l3packages/l3keys2e/l3keys2e.sty" 1696969620 4674 15ab6bdfc97f65b00e59c2867851f715 "" + "/usr/share/texlive/texmf-dist/tex/latex/l3packages/xparse/xparse.sty" 1696969620 9327 c30c00c0072edba199ede5889311aaa9 "" "/usr/share/texlive/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg" 1279039959 678 4792914a8f45be57bb98413425e4c7af "" "/usr/share/texlive/texmf-dist/tex/latex/letltxmacro/letltxmacro.sty" 1575499565 5766 13a9e8766c47f30327caf893ece86ac8 "" "/usr/share/texlive/texmf-dist/tex/latex/mmap/oml.cmap" 1215649417 1866 c1c12138091b4a8edd4a24a940e6f792 "" @@ -123,26 +132,25 @@ "/usr/share/texlive/texmf-dist/tex/latex/mmap/omx.cmap" 1215649417 3001 252c8ca42b06a22cb1a11c0e47790c6e "" "/usr/share/texlive/texmf-dist/tex/latex/needspace/needspace.sty" 1364856750 852 0e34dbb72efc69fa07602405ad95585e "" "/usr/share/texlive/texmf-dist/tex/latex/oberdiek/hypcap.sty" 1575152444 3822 b53c749cd81352b4679a35b0dafefb95 "" - "/usr/share/texlive/texmf-dist/tex/latex/parskip/parskip-2001-04-09.sty" 1536789184 2757 ea00cb4f4e9abc702916f74d3812ef67 "" "/usr/share/texlive/texmf-dist/tex/latex/parskip/parskip.sty" 1615762720 4288 94714aa7f535440f33181fec52a31963 "" "/usr/share/texlive/texmf-dist/tex/latex/pict2e/p2e-pdftex.def" 1454715303 1168 efb94e82cc1584d4f62679f3487b5339 "" "/usr/share/texlive/texmf-dist/tex/latex/pict2e/pict2e.cfg" 1454715303 1920 2185073db458618f4a8a794158cf3681 "" "/usr/share/texlive/texmf-dist/tex/latex/pict2e/pict2e.sty" 1601586370 30933 ccdcd551eb516817cc8f41862254e6e7 "" "/usr/share/texlive/texmf-dist/tex/latex/refcount/refcount.sty" 1576624809 9878 9e94e8fa600d95f9c7731bb21dfb67a4 "" - "/usr/share/texlive/texmf-dist/tex/latex/rerunfilecheck/rerunfilecheck.sty" 1575674187 9715 b051d5b493d9fe5f4bc251462d039e5f "" + "/usr/share/texlive/texmf-dist/tex/latex/rerunfilecheck/rerunfilecheck.sty" 1657483315 9714 ba3194bd52c8499b3f1e3eb91d409670 "" "/usr/share/texlive/texmf-dist/tex/latex/tabulary/tabulary.sty" 1403566480 13791 8c83287d79183c3bf58fd70871e8a70b "" - "/usr/share/texlive/texmf-dist/tex/latex/titlesec/titlesec.sty" 1625518490 48833 3b7b4cfab1a3d15596bfd3772a77ab65 "" - "/usr/share/texlive/texmf-dist/tex/latex/tools/array.sty" 1636758526 12694 6c23725d50ab9d1e2d3ce482c58ffcf3 "" - "/usr/share/texlive/texmf-dist/tex/latex/tools/longtable.sty" 1636758526 12892 3ffe092fc7f5d1cb9866f1bcb071d0d6 "" - "/usr/share/texlive/texmf-dist/tex/latex/tools/multicol.sty" 1636758526 32262 2bb622a0aa56c4a7a5cbdfe9d122c15a "" + "/usr/share/texlive/texmf-dist/tex/latex/titlesec/titlesec.sty" 1698436711 48766 0b93839be28e9744a24c45075c75b2e2 "" + "/usr/share/texlive/texmf-dist/tex/latex/tools/array.sty" 1698869629 12667 e4b5eb11e4b7239e6c8a52bbe074a6c6 "" + "/usr/share/texlive/texmf-dist/tex/latex/tools/longtable.sty" 1698955022 12935 94a3291359b5f73ff1b19345a6983105 "" + "/usr/share/texlive/texmf-dist/tex/latex/tools/multicol.sty" 1686341992 32515 51caec75eda9c8890135f12f1a4eddc3 "" "/usr/share/texlive/texmf-dist/tex/latex/txfonts/t1txtt.fd" 1137111002 1324 7b6c95370a64cd8c7620cbefefb53dba "" "/usr/share/texlive/texmf-dist/tex/latex/txfonts/ts1txtt.fd" 1137111002 1333 8a39a5a2c80ffd81756250fe53398bff "" "/usr/share/texlive/texmf-dist/tex/latex/upquote/upquote.sty" 1334873510 1048 517e01cde97c1c0baf72e69d43aa5a2e "" "/usr/share/texlive/texmf-dist/tex/latex/url/url.sty" 1388531844 12796 8edb7d69a20b857904dd0ea757c14ec9 "" "/usr/share/texlive/texmf-dist/tex/latex/varwidth/varwidth.sty" 1238697683 10894 d359a13923460b2a73d4312d613554c8 "" "/usr/share/texlive/texmf-dist/tex/latex/wrapfig/wrapfig.sty" 1137111090 26220 3701aebf80ccdef248c0c20dd062fea9 "" - "/usr/share/texlive/texmf-dist/tex/latex/xcolor/xcolor.sty" 1635798903 56029 3f7889dab51d620aa43177c391b7b190 "" - "/usr/share/texlive/texmf-dist/web2c/texmf.cnf" 1644012257 39432 7155514e09a3d69036fac785183a21c2 "" + "/usr/share/texlive/texmf-dist/tex/latex/xcolor/xcolor.sty" 1700082560 55487 80a65caedd3722f4c20a14a69e785d8f "" + "/usr/share/texlive/texmf-dist/web2c/texmf.cnf" 1707919699 40399 f2c302f7d2af602abb742093540a5834 "" "/usr/share/texmf/fonts/enc/dvips/tex-gyre/q-ec.enc" 1529098226 2457 aaabbccba4df2a7f7371410ee4e075a3 "" "/usr/share/texmf/fonts/enc/dvips/tex-gyre/q-ts1.enc" 1529098226 3124 3813fd4c981d99822890a2861b0d274c "" "/usr/share/texmf/fonts/tfm/public/tex-gyre/ec-qhvb.tfm" 1480098718 11796 b7bc3db132e822d2872ea50ba8fa7cc0 "" @@ -162,36 +170,36 @@ "/usr/share/texmf/tex/latex/tex-gyre/tgheros.sty" 1480098840 2130 2b41e80713f78d339e74c19d96fe70a1 "" "/usr/share/texmf/tex/latex/tex-gyre/tgtermes.sty" 1480098840 2211 af9b7d12507105a58a3e8e926996b827 "" "/usr/share/texmf/tex/latex/tex-gyre/ts1qtm.fd" 1480098840 1160 de7b1cf70edab73c9f1704df2a9fdbbd "" - "/usr/share/texmf/web2c/texmf.cnf" 1644012257 39432 7155514e09a3d69036fac785183a21c2 "" - "/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map" 1712803388 4234243 4a42437c56f0785ccfd4e39da48c38dc "" - "/var/lib/texmf/web2c/pdftex/pdflatex.fmt" 1712803393 1405649 09028a54f5e9b3274f4344c937e7ff76 "" - "DFOLS.aux" 1739235802 17767 2ec5549fe4e27a7a5c38b3a9a48a94e3 "pdflatex" - "DFOLS.ind" 1712813975 0 d41d8cd98f00b204e9800998ecf8427e "makeindex DFOLS.idx" - "DFOLS.out" 1739235802 12063 b1d090d924f9cae29b25afecfc8cf68a "pdflatex" - "DFOLS.tex" 1739235795 118720 58c9122a99d2fed94197ecca070779d2 "" - "DFOLS.toc" 1739235802 5906 9502799029c4e7992ade8afae6d3a9f6 "pdflatex" - "data_fitting.png" 1587347499 29893 211bb1c28ea25d47c8c0990fbf39c55c "" - "sphinx.sty" 1722476524 44560 f9fbf51072c954d129c9bd5284cc4ccf "" - "sphinxhighlight.sty" 1739235797 7553 83fb52292c17957d9f4aadcb28c57a87 "" - "sphinxlatexadmonitions.sty" 1722476524 10989 c38302e64c2bb47779f086869b246760 "" - "sphinxlatexcontainers.sty" 1722476524 901 d3a3a1b7b2547f47ade2499350b5c420 "" - "sphinxlatexgraphics.sty" 1722476524 4840 a9578332b6f3b35e198751fb632c9b79 "" - "sphinxlatexindbibtoc.sty" 1722476524 2066 b93f8504d02f6337fde3074b179de55e "" - "sphinxlatexlists.sty" 1722476524 5139 c2de2a1d98d3c6ceedfe46505abd3c07 "" - "sphinxlatexliterals.sty" 1722476524 46048 2b66269d0ecf11768a14b5de4ddf9051 "" - "sphinxlatexnumfig.sty" 1722476524 4532 3633caf84afa1a98e1a060b7868202bb "" - "sphinxlatexobjects.sty" 1722476524 14354 7db81294dd9bf70f65d5cc34221a0b86 "" - "sphinxlatexshadowbox.sty" 1722476524 5066 97a2be0d1dfdc98548b7461f1949b95f "" - "sphinxlatexstyleheadings.sty" 1722476524 3445 a1582a5f3b336dcffa71b5ca3d8fc31f "" - "sphinxlatexstylepage.sty" 1722476525 3064 abce6c3018a84afee0afb08a431944ea "" - "sphinxlatexstyletext.sty" 1722476525 8589 a7e8f95eb4fef6c1cd2623cd417d6467 "" - "sphinxlatextables.sty" 1722476525 57830 16f2773b765508003aec5d08680f39b9 "" - "sphinxmanual.cls" 1722476525 4241 7b0d7a37df7b5715fb0dbd585c52ecdb "" - "sphinxmessages.sty" 1739235797 745 3f5fcd6cdd7964ed608767954a8ced6f "" - "sphinxoptionsgeometry.sty" 1722476525 2061 47bb34b8ed8a78823eb0c886abfb9f4d "" - "sphinxoptionshyperref.sty" 1722476525 1094 79beb8b8a3f10784f8cce804e0f9d3aa "" - "sphinxpackageboxes.sty" 1722476525 36615 1d74c63e665ede6c648fa08c42ea70fb "" - "sphinxpackagefootnote.sty" 1722476525 15254 d93f70cf000a9adb198015bf1b2f136c "" + "/usr/share/texmf/web2c/texmf.cnf" 1707919699 40399 f2c302f7d2af602abb742093540a5834 "" + "/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map" 1752469655.74081 5312232 f3296911be9cc021788f3f879cf0a47d "" + "/var/lib/texmf/web2c/pdftex/pdflatex.fmt" 1752469665 6800791 4b97d92e40580d280f8a4d3890332e74 "" + "DFOLS.aux" 1757469881.10536 17791 95ccc8406fc783aea89975172c39712d "pdflatex" + "DFOLS.ind" 1757469788.70259 0 d41d8cd98f00b204e9800998ecf8427e "makeindex DFOLS.idx" + "DFOLS.out" 1757469881.10941 12492 b8d2c0d2fc673cbe8a323f2b3c55d7ba "pdflatex" + "DFOLS.tex" 1757469877.88873 132823 01beaab0284a71a022d2ee45ebd6dbc8 "" + "DFOLS.toc" 1757469881.10941 6090 700d7eb0c89359bbda79f4c6cdbdac30 "pdflatex" + "data_fitting.png" 1752147186.58185 29893 211bb1c28ea25d47c8c0990fbf39c55c "" + "sphinx.sty" 1757047429.46132 54203 ee7fe875437470f5328ee20661bb9f1d "" + "sphinxhighlight.sty" 1757469879.26497 7553 83fb52292c17957d9f4aadcb28c57a87 "" + "sphinxlatexadmonitions.sty" 1757047429.46545 19111 5e67a0f91439018bceb7cadf319345e6 "" + "sphinxlatexcontainers.sty" 1757047429.46545 900 d61f923db071a7b54d3cee8a1e6935d3 "" + "sphinxlatexgraphics.sty" 1757047429.46545 4918 c9266041d02bc615d54b890e96e3acd3 "" + "sphinxlatexindbibtoc.sty" 1757047429.46545 2065 1f1f215c304208004fc0522855b3b127 "" + "sphinxlatexlists.sty" 1757047429.46545 5138 98bcb41aa6ecb6cc5c1a6a7c936cb8a8 "" + "sphinxlatexliterals.sty" 1757047429.46545 45860 fa61a279a7f157481590da017e0c6962 "" + "sphinxlatexnumfig.sty" 1757047429.46545 5419 aeaffe9a9d596e3663201bb873b06758 "" + "sphinxlatexobjects.sty" 1757047429.46545 15707 bc327ee938baefa281deb478d03161c7 "" + "sphinxlatexshadowbox.sty" 1757047429.46545 8437 cec78b6bb66e95d214da9fd42b1af598 "" + "sphinxlatexstyleheadings.sty" 1757047429.46545 3742 2a2cc6aa695b2f8c98eb9ee104e5fc6f "" + "sphinxlatexstylepage.sty" 1757047429.46959 2671 e63daf3b9f0f8a387a8b4ba09c515982 "" + "sphinxlatexstyletext.sty" 1757047429.46959 6759 9e932c65374cfb62686485d331bc975c "" + "sphinxlatextables.sty" 1757047429.46959 57643 7f1013c2fa11942370d867527bdda568 "" + "sphinxmanual.cls" 1752147186.58577 4241 7b0d7a37df7b5715fb0dbd585c52ecdb "" + "sphinxmessages.sty" 1757469879.5083 745 3f5fcd6cdd7964ed608767954a8ced6f "" + "sphinxoptionsgeometry.sty" 1757047429.46959 2060 6c27b3eba37bde592ae8908ab2c1ac0f "" + "sphinxoptionshyperref.sty" 1757047429.46959 1093 e468489bae7631a7f387b4b0f7bc15d4 "" + "sphinxpackageboxes.sty" 1757047429.46959 36106 1be2053eb1cb9b083b3a75e3657bcb24 "" + "sphinxpackagefootnote.sty" 1757047429.46959 15330 2fb656b6ce8cd1f6aba2d1c508fb51e5 "" (generated) "DFOLS.aux" "DFOLS.idx" @@ -199,3 +207,4 @@ "DFOLS.out" "DFOLS.pdf" "DFOLS.toc" + (rewritten before read) diff --git a/docs/build/latex/DFOLS.fls b/docs/build/latex/DFOLS.fls index 99ac4c4..2e78fac 100644 --- a/docs/build/latex/DFOLS.fls +++ b/docs/build/latex/DFOLS.fls @@ -1,4 +1,4 @@ -PWD /mnt/c/Users/lindo/Documents/git/dfols/docs/build/latex +PWD /home/lindon/git/dfols/docs/build/latex INPUT /etc/texmf/web2c/texmf.cnf INPUT /usr/share/texmf/web2c/texmf.cnf INPUT /usr/share/texlive/texmf-dist/web2c/texmf.cnf @@ -6,80 +6,19 @@ INPUT /var/lib/texmf/web2c/pdftex/pdflatex.fmt INPUT DFOLS.tex OUTPUT DFOLS.log INPUT ./sphinxmanual.cls -INPUT ./sphinxmanual.cls -INPUT sphinxmanual.cls -INPUT ./sphinxmanual.cls -INPUT ./sphinxmanual.cls -INPUT ./sphinxmanual.cls -INPUT ./sphinxmanual.cls -INPUT ./sphinxmanual.cls -INPUT sphinxmanual.cls -INPUT ./sphinxmanual.cls INPUT sphinxmanual.cls INPUT /usr/share/texlive/texmf-dist/tex/latex/base/report.cls INPUT /usr/share/texlive/texmf-dist/tex/latex/base/report.cls -INPUT /usr/share/texlive/texmf-dist/tex/latex/base/report.cls -INPUT /usr/share/texlive/texmf-dist/tex/latex/base/report.cls -INPUT /usr/share/texlive/texmf-dist/tex/latex/base/report.cls -INPUT /usr/share/texlive/texmf-dist/tex/latex/base/report.cls -INPUT /usr/share/texlive/texmf-dist/tex/latex/base/report.cls -INPUT /usr/share/texlive/texmf-dist/tex/latex/base/report.cls -INPUT /usr/share/texlive/texmf-dist/tex/latex/base/report.cls -INPUT /usr/share/texlive/texmf-dist/tex/latex/base/report.cls -INPUT /usr/share/texlive/texmf-dist/tex/latex/base/report.cls -INPUT /usr/share/texlive/texmf-dist/tex/latex/base/report.cls -INPUT /usr/share/texlive/texmf-dist/tex/latex/base/report.cls -INPUT /usr/share/texlive/texmf-dist/tex/latex/base/report.cls -INPUT /usr/share/texlive/texmf-dist/tex/latex/base/report.cls -INPUT /usr/share/texlive/texmf-dist/tex/latex/base/report.cls -INPUT /usr/share/texlive/texmf-dist/tex/latex/base/report.cls -INPUT /usr/share/texlive/texmf-dist/tex/latex/base/report.cls -INPUT /usr/share/texlive/texmf-dist/tex/latex/base/report.cls -INPUT /usr/share/texlive/texmf-dist/tex/latex/base/report.cls -INPUT /usr/share/texlive/texmf-dist/tex/latex/base/report.cls INPUT /usr/share/texlive/texmf-dist/tex/latex/base/size10.clo INPUT /usr/share/texlive/texmf-dist/tex/latex/base/size10.clo INPUT /usr/share/texlive/texmf-dist/tex/latex/base/size10.clo -INPUT /usr/share/texlive/texmf-dist/tex/latex/base/size10.clo -INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/hyperref.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/hyperref.sty INPUT ./sphinx.sty -INPUT ./sphinx.sty -INPUT ./sphinx.sty -INPUT ./sphinx.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/base/textcomp.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/base/textcomp.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/base/inputenc.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/base/inputenc.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/base/inputenc.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/base/inputenc.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/base/inputenc.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/base/inputenc.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/base/inputenc.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/base/inputenc.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/base/inputenc.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/base/inputenc.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/base/inputenc.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/cmap/cmap.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/cmap/cmap.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/cmap/cmap.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/cmap/cmap.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/cmap/cmap.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/cmap/cmap.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/cmap/cmap.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/cmap/cmap.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/cmap/cmap.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/cmap/cmap.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/cmap/cmap.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/base/fontenc.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/base/fontenc.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/base/fontenc.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/base/fontenc.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/base/fontenc.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/base/fontenc.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/base/fontenc.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/base/fontenc.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/base/fontenc.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/base/fontenc.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/base/fontenc.sty INPUT /usr/share/texlive/texmf-dist/fonts/map/fontname/texfonts.map @@ -90,999 +29,246 @@ OUTPUT DFOLS.pdf INPUT /usr/share/texlive/texmf-dist/tex/latex/cmap/t1.cmap INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsmath.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsmath.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsmath.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsmath.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsmath.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsmath.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsmath.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsmath.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsmath.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsmath.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsmath.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsopn.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsopn.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amstext.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amstext.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amstext.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amstext.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amstext.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amstext.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amstext.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amstext.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amstext.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amstext.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amstext.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsgen.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsgen.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsgen.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsgen.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsgen.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsgen.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsgen.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsgen.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsgen.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsgen.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsgen.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsbsy.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsbsy.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsbsy.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsbsy.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsbsy.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsbsy.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsbsy.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsbsy.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsbsy.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsbsy.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsbsy.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsgen.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsopn.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsopn.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsopn.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsopn.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsopn.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsopn.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsopn.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsopn.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsopn.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsopn.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsopn.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amsgen.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/amsfonts/amssymb.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/amsfonts/amssymb.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/amsfonts/amssymb.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/amsfonts/amssymb.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/amsfonts/amssymb.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/amsfonts/amssymb.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/amsfonts/amssymb.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/amsfonts/amssymb.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/amsfonts/amssymb.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/amsfonts/amssymb.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/amsfonts/amssymb.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/amsfonts/amsfonts.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/amsfonts/amsfonts.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/amsfonts/amsfonts.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/amsfonts/amsfonts.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/amsfonts/amsfonts.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/amsfonts/amsfonts.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/amsfonts/amsfonts.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/amsfonts/amsfonts.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/amsfonts/amsfonts.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/amsfonts/amsfonts.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/amsfonts/amsfonts.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amstext.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/babel/babel.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/babel/babel.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/babel/babel.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/babel/babel.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/babel/babel.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/babel/babel.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/babel/babel.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/babel/babel.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/babel/babel.sty INPUT /usr/share/texlive/texmf-dist/tex/generic/babel/babel.sty INPUT /usr/share/texlive/texmf-dist/tex/generic/babel/babel.sty INPUT /usr/share/texlive/texmf-dist/tex/generic/babel/txtbabel.def INPUT /usr/share/texlive/texmf-dist/tex/generic/babel-english/english.ldf INPUT /usr/share/texlive/texmf-dist/tex/generic/babel-english/english.ldf INPUT /usr/share/texlive/texmf-dist/tex/generic/babel-english/english.ldf -INPUT /usr/share/texlive/texmf-dist/tex/generic/babel-english/english.ldf -INPUT /usr/share/texlive/texmf-dist/tex/generic/babel-english/english.ldf -INPUT /usr/share/texlive/texmf-dist/tex/generic/babel-english/english.ldf -INPUT /usr/share/texmf/tex/latex/tex-gyre/tgtermes.sty -INPUT /usr/share/texmf/tex/latex/tex-gyre/tgtermes.sty -INPUT /usr/share/texmf/tex/latex/tex-gyre/tgtermes.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/babel/locale/en/babel-english.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/babel/locale/en/babel-english.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/babel/locale/en/babel-english.tex +INPUT /usr/share/texlive/texmf-dist/tex/generic/babel/locale/en/babel-en.ini INPUT /usr/share/texmf/tex/latex/tex-gyre/tgtermes.sty INPUT /usr/share/texmf/tex/latex/tex-gyre/tgtermes.sty -INPUT /usr/share/texmf/tex/latex/tex-gyre/tgtermes.sty -INPUT /usr/share/texmf/tex/latex/tex-gyre/tgtermes.sty -INPUT /usr/share/texmf/tex/latex/tex-gyre/tgtermes.sty -INPUT /usr/share/texmf/tex/latex/tex-gyre/tgtermes.sty -INPUT /usr/share/texmf/tex/latex/tex-gyre/tgtermes.sty -INPUT /usr/share/texmf/tex/latex/tex-gyre/tgtermes.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/kvoptions/kvoptions.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/kvoptions/kvoptions.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/kvoptions/kvoptions.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/kvoptions/kvoptions.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/kvoptions/kvoptions.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/kvoptions/kvoptions.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/kvoptions/kvoptions.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/kvoptions/kvoptions.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/kvoptions/kvoptions.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/kvoptions/kvoptions.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/kvoptions/kvoptions.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/keyval.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/keyval.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/keyval.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/keyval.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/keyval.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/keyval.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/keyval.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/keyval.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/keyval.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/keyval.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/keyval.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty INPUT /usr/share/texlive/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty INPUT /usr/share/texlive/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/kvsetkeys/kvsetkeys.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/kvsetkeys/kvsetkeys.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/kvsetkeys/kvsetkeys.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/kvsetkeys/kvsetkeys.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/kvsetkeys/kvsetkeys.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/kvsetkeys/kvsetkeys.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/kvsetkeys/kvsetkeys.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/kvsetkeys/kvsetkeys.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/kvsetkeys/kvsetkeys.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/kvsetkeys/kvsetkeys.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/kvsetkeys/kvsetkeys.sty -INPUT /usr/share/texmf/tex/latex/tex-gyre/tgheros.sty -INPUT /usr/share/texmf/tex/latex/tex-gyre/tgheros.sty -INPUT /usr/share/texmf/tex/latex/tex-gyre/tgheros.sty -INPUT /usr/share/texmf/tex/latex/tex-gyre/tgheros.sty -INPUT /usr/share/texmf/tex/latex/tex-gyre/tgheros.sty -INPUT /usr/share/texmf/tex/latex/tex-gyre/tgheros.sty -INPUT /usr/share/texmf/tex/latex/tex-gyre/tgheros.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/kvsetkeys/kvsetkeys.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/kvsetkeys/kvsetkeys.sty INPUT /usr/share/texmf/tex/latex/tex-gyre/tgheros.sty INPUT /usr/share/texmf/tex/latex/tex-gyre/tgheros.sty -INPUT /usr/share/texmf/tex/latex/tex-gyre/tgheros.sty -INPUT /usr/share/texmf/tex/latex/tex-gyre/tgheros.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/kvoptions/kvoptions.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/fncychap/fncychap.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/fncychap/fncychap.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/fncychap/fncychap.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/fncychap/fncychap.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/fncychap/fncychap.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/fncychap/fncychap.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/fncychap/fncychap.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/fncychap/fncychap.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/fncychap/fncychap.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/fncychap/fncychap.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/fncychap/fncychap.sty -INPUT ./sphinx.sty -INPUT ./sphinx.sty -INPUT sphinx.sty -INPUT ./sphinx.sty -INPUT ./sphinx.sty -INPUT ./sphinx.sty -INPUT ./sphinx.sty -INPUT ./sphinx.sty INPUT sphinx.sty -INPUT ./sphinx.sty -INPUT sphinx.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/xcolor/xcolor.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/xcolor/xcolor.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/xcolor/xcolor.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/xcolor/xcolor.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/xcolor/xcolor.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/xcolor/xcolor.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/xcolor/xcolor.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/xcolor/xcolor.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/xcolor/xcolor.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/xcolor/xcolor.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/xcolor/xcolor.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/xcolor/xcolor.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/xcolor/xcolor.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics-cfg/color.cfg INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics-cfg/color.cfg INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics-cfg/color.cfg -INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics-cfg/color.cfg -INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics-def/pdftex.def INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics-def/pdftex.def INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics-def/pdftex.def INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics-def/pdftex.def -INPUT /usr/share/texlive/texmf-dist/tex/latex/kvoptions/kvoptions.sty -INPUT ./sphinxoptionshyperref.sty -INPUT sphinxoptionshyperref.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/mathcolor.ltx +INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/mathcolor.ltx +INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/mathcolor.ltx +INPUT /usr/share/texlive/texmf-dist/tex/latex/fontawesome5/fontawesome5.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/fontawesome5/fontawesome5.sty INPUT ./sphinxoptionshyperref.sty INPUT sphinxoptionshyperref.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/hyperref.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/hyperref.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/hyperref.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/hyperref.sty -INPUT ./sphinxoptionsgeometry.sty -INPUT sphinxoptionsgeometry.sty INPUT ./sphinxoptionsgeometry.sty INPUT sphinxoptionsgeometry.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/geometry/geometry.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/geometry/geometry.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amstext.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/base/textcomp.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/base/textcomp.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/base/textcomp.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/base/textcomp.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/base/textcomp.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/base/textcomp.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/base/textcomp.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/base/textcomp.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/base/textcomp.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/base/textcomp.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/base/textcomp.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/float/float.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/float/float.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/float/float.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/float/float.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/float/float.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/float/float.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/float/float.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/float/float.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/float/float.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/float/float.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/float/float.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/wrapfig/wrapfig.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/wrapfig/wrapfig.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/wrapfig/wrapfig.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/wrapfig/wrapfig.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/wrapfig/wrapfig.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/wrapfig/wrapfig.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/wrapfig/wrapfig.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/wrapfig/wrapfig.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/wrapfig/wrapfig.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/wrapfig/wrapfig.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/wrapfig/wrapfig.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/capt-of/capt-of.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/capt-of/capt-of.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/capt-of/capt-of.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/capt-of/capt-of.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/capt-of/capt-of.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/capt-of/capt-of.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/capt-of/capt-of.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/capt-of/capt-of.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/capt-of/capt-of.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/capt-of/capt-of.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/capt-of/capt-of.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/tools/multicol.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/tools/multicol.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/tools/multicol.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/tools/multicol.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/tools/multicol.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/tools/multicol.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/tools/multicol.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/tools/multicol.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/tools/multicol.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/tools/multicol.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/tools/multicol.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/graphicx.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/graphicx.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/graphicx.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/graphicx.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/graphicx.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/graphicx.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/graphicx.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/graphicx.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/graphicx.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/graphicx.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/graphicx.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/keyval.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/graphics.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/graphics.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/graphics.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/graphics.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/graphics.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/graphics.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/graphics.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/graphics.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/graphics.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/graphics.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/graphics.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/trig.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/trig.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/trig.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/trig.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/trig.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/trig.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/trig.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/trig.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/trig.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/trig.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/trig.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics-cfg/graphics.cfg INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics-cfg/graphics.cfg INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics-cfg/graphics.cfg -INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics-cfg/graphics.cfg -INPUT ./sphinxlatexgraphics.sty -INPUT sphinxlatexgraphics.sty INPUT ./sphinxlatexgraphics.sty INPUT sphinxlatexgraphics.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/amsmath/amstext.sty -INPUT ./sphinxpackageboxes.sty INPUT ./sphinxpackageboxes.sty INPUT sphinxpackageboxes.sty -INPUT ./sphinxpackageboxes.sty -INPUT ./sphinxpackageboxes.sty -INPUT ./sphinxpackageboxes.sty -INPUT ./sphinxpackageboxes.sty -INPUT ./sphinxpackageboxes.sty -INPUT sphinxpackageboxes.sty -INPUT ./sphinxpackageboxes.sty -INPUT sphinxpackageboxes.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/pict2e/pict2e.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/pict2e/pict2e.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/pict2e/pict2e.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/pict2e/pict2e.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/pict2e/pict2e.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/pict2e/pict2e.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/pict2e/pict2e.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/pict2e/pict2e.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/pict2e/pict2e.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/pict2e/pict2e.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/pict2e/pict2e.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/pict2e/pict2e.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/pict2e/pict2e.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/pict2e/pict2e.cfg INPUT /usr/share/texlive/texmf-dist/tex/latex/pict2e/pict2e.cfg INPUT /usr/share/texlive/texmf-dist/tex/latex/pict2e/pict2e.cfg -INPUT /usr/share/texlive/texmf-dist/tex/latex/pict2e/pict2e.cfg -INPUT /usr/share/texlive/texmf-dist/tex/latex/pict2e/p2e-pdftex.def INPUT /usr/share/texlive/texmf-dist/tex/latex/pict2e/p2e-pdftex.def INPUT /usr/share/texlive/texmf-dist/tex/latex/pict2e/p2e-pdftex.def INPUT /usr/share/texlive/texmf-dist/tex/latex/pict2e/p2e-pdftex.def -INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/trig.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/ellipse/ellipse.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/ellipse/ellipse.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/ellipse/ellipse.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/ellipse/ellipse.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/ellipse/ellipse.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/ellipse/ellipse.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/ellipse/ellipse.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/ellipse/ellipse.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/ellipse/ellipse.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/ellipse/ellipse.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/ellipse/ellipse.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/ellipse/ellipse.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/ellipse/ellipse.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/pict2e/pict2e.sty INPUT ./sphinxlatexadmonitions.sty INPUT sphinxlatexadmonitions.sty -INPUT ./sphinxlatexadmonitions.sty -INPUT sphinxlatexadmonitions.sty -INPUT ./sphinxpackageboxes.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/framed/framed.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/framed/framed.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/framed/framed.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/framed/framed.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/framed/framed.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/framed/framed.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/framed/framed.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/framed/framed.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/framed/framed.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/framed/framed.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/framed/framed.sty -INPUT ./sphinxlatexliterals.sty -INPUT sphinxlatexliterals.sty +INPUT ./sphinxpackagefootnote.sty +INPUT sphinxpackagefootnote.sty INPUT ./sphinxlatexliterals.sty INPUT sphinxlatexliterals.sty -INPUT ./sphinxpackageboxes.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/framed/framed.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/fancyvrb/fancyvrb.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/fancyvrb/fancyvrb.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/fancyvrb/fancyvrb.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/fancyvrb/fancyvrb.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/fancyvrb/fancyvrb.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/fancyvrb/fancyvrb.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/fancyvrb/fancyvrb.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/fancyvrb/fancyvrb.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/fancyvrb/fancyvrb.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/fancyvrb/fancyvrb.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/fancyvrb/fancyvrb.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/keyval.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/base/alltt.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/base/alltt.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/base/alltt.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/base/alltt.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/base/alltt.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/base/alltt.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/base/alltt.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/base/alltt.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/base/alltt.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/base/alltt.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/base/alltt.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/upquote/upquote.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/upquote/upquote.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/upquote/upquote.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/upquote/upquote.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/upquote/upquote.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/upquote/upquote.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/upquote/upquote.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/upquote/upquote.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/upquote/upquote.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/upquote/upquote.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/upquote/upquote.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/base/textcomp.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/needspace/needspace.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/needspace/needspace.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/needspace/needspace.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/needspace/needspace.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/needspace/needspace.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/needspace/needspace.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/needspace/needspace.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/needspace/needspace.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/needspace/needspace.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/needspace/needspace.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/needspace/needspace.sty -INPUT ./sphinxlatexshadowbox.sty -INPUT sphinxlatexshadowbox.sty INPUT ./sphinxlatexshadowbox.sty INPUT sphinxlatexshadowbox.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/framed/framed.sty -INPUT ./sphinxpackageboxes.sty INPUT ./sphinxlatexcontainers.sty INPUT sphinxlatexcontainers.sty -INPUT ./sphinxlatexcontainers.sty -INPUT sphinxlatexcontainers.sty -INPUT ./sphinxhighlight.sty -INPUT ./sphinxhighlight.sty -INPUT sphinxhighlight.sty -INPUT ./sphinxhighlight.sty -INPUT ./sphinxhighlight.sty -INPUT ./sphinxhighlight.sty -INPUT ./sphinxhighlight.sty -INPUT ./sphinxhighlight.sty -INPUT sphinxhighlight.sty INPUT ./sphinxhighlight.sty INPUT sphinxhighlight.sty INPUT ./sphinxlatextables.sty INPUT sphinxlatextables.sty -INPUT ./sphinxlatextables.sty -INPUT sphinxlatextables.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/tabulary/tabulary.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/tabulary/tabulary.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/tabulary/tabulary.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/tabulary/tabulary.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/tabulary/tabulary.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/tabulary/tabulary.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/tabulary/tabulary.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/tabulary/tabulary.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/tabulary/tabulary.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/tabulary/tabulary.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/tabulary/tabulary.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/tools/array.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/tools/array.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/tools/array.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/tools/array.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/tools/array.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/tools/array.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/tools/array.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/tools/array.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/tools/array.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/tools/array.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/tools/array.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/tools/longtable.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/tools/longtable.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/tools/longtable.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/tools/longtable.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/tools/longtable.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/tools/longtable.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/tools/longtable.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/tools/longtable.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/tools/longtable.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/tools/longtable.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/tools/longtable.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/varwidth/varwidth.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/varwidth/varwidth.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/varwidth/varwidth.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/varwidth/varwidth.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/varwidth/varwidth.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/varwidth/varwidth.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/varwidth/varwidth.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/varwidth/varwidth.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/varwidth/varwidth.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/varwidth/varwidth.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/varwidth/varwidth.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/colortbl/colortbl.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/colortbl/colortbl.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/colortbl/colortbl.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/colortbl/colortbl.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/colortbl/colortbl.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/colortbl/colortbl.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/colortbl/colortbl.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/colortbl/colortbl.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/colortbl/colortbl.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/colortbl/colortbl.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/colortbl/colortbl.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/tools/array.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/color.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/booktabs/booktabs.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/booktabs/booktabs.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/booktabs/booktabs.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/booktabs/booktabs.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/booktabs/booktabs.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/booktabs/booktabs.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/booktabs/booktabs.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/booktabs/booktabs.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/booktabs/booktabs.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/booktabs/booktabs.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/booktabs/booktabs.sty -INPUT ./sphinxlatexnumfig.sty -INPUT sphinxlatexnumfig.sty INPUT ./sphinxlatexnumfig.sty INPUT sphinxlatexnumfig.sty INPUT ./sphinxlatexlists.sty INPUT sphinxlatexlists.sty -INPUT ./sphinxlatexlists.sty -INPUT sphinxlatexlists.sty -INPUT ./sphinxpackagefootnote.sty -INPUT ./sphinxpackagefootnote.sty -INPUT sphinxpackagefootnote.sty -INPUT ./sphinxpackagefootnote.sty -INPUT ./sphinxpackagefootnote.sty -INPUT ./sphinxpackagefootnote.sty -INPUT ./sphinxpackagefootnote.sty -INPUT ./sphinxpackagefootnote.sty -INPUT sphinxpackagefootnote.sty -INPUT ./sphinxpackagefootnote.sty -INPUT sphinxpackagefootnote.sty -INPUT ./sphinxlatexindbibtoc.sty -INPUT sphinxlatexindbibtoc.sty INPUT ./sphinxlatexindbibtoc.sty INPUT sphinxlatexindbibtoc.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/base/makeidx.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/base/makeidx.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/base/makeidx.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/base/makeidx.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/base/makeidx.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/base/makeidx.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/base/makeidx.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/base/makeidx.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/base/makeidx.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/base/makeidx.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/base/makeidx.sty INPUT ./sphinxlatexstylepage.sty INPUT sphinxlatexstylepage.sty -INPUT ./sphinxlatexstylepage.sty -INPUT sphinxlatexstylepage.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/parskip/parskip-2001-04-09.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/parskip/parskip-2001-04-09.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/parskip/parskip.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/parskip/parskip.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/parskip/parskip.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/parskip/parskip.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/parskip/parskip.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/parskip/parskip.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/parskip/parskip.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/parskip/parskip.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/parskip/parskip.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/parskip/parskip.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/parskip/parskip.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/parskip/parskip-2001-04-09.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/etoolbox/etoolbox.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/etoolbox/etoolbox.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/fancyhdr/fancyhdr.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/fancyhdr/fancyhdr.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/fancyhdr/fancyhdr.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/fancyhdr/fancyhdr.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/fancyhdr/fancyhdr.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/fancyhdr/fancyhdr.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/fancyhdr/fancyhdr.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/fancyhdr/fancyhdr.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/fancyhdr/fancyhdr.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/fancyhdr/fancyhdr.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/fancyhdr/fancyhdr.sty -INPUT ./sphinxlatexstyleheadings.sty -INPUT sphinxlatexstyleheadings.sty INPUT ./sphinxlatexstyleheadings.sty INPUT sphinxlatexstyleheadings.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/titlesec/titlesec.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/titlesec/titlesec.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/titlesec/titlesec.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/titlesec/titlesec.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/titlesec/titlesec.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/titlesec/titlesec.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/titlesec/titlesec.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/titlesec/titlesec.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/titlesec/titlesec.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/titlesec/titlesec.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/titlesec/titlesec.sty -INPUT ./sphinxlatexstyletext.sty -INPUT sphinxlatexstyletext.sty -INPUT ./sphinxlatexstyletext.sty -INPUT sphinxlatexstyletext.sty -INPUT ./sphinxlatexobjects.sty -INPUT sphinxlatexobjects.sty -INPUT ./sphinxlatexobjects.sty -INPUT sphinxlatexobjects.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/geometry/geometry.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/geometry/geometry.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/geometry/geometry.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/geometry/geometry.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/geometry/geometry.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/geometry/geometry.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/geometry/geometry.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/geometry/geometry.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/geometry/geometry.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/geometry/geometry.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/geometry/geometry.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/keyval.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/iftex/ifvtex.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/iftex/ifvtex.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/iftex/ifvtex.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/iftex/ifvtex.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/iftex/ifvtex.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/iftex/ifvtex.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/iftex/ifvtex.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/iftex/ifvtex.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/iftex/ifvtex.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/iftex/ifvtex.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/iftex/ifvtex.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/iftex/iftex.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/iftex/iftex.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/iftex/iftex.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/iftex/iftex.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/iftex/iftex.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/iftex/iftex.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/iftex/iftex.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/iftex/iftex.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/iftex/iftex.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/iftex/iftex.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/iftex/iftex.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/hyperref.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/hyperref.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/hyperref.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/hyperref.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/hyperref.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/hyperref.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/hyperref.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/hyperref.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/hyperref.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/hyperref.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/hyperref.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/iftex/iftex.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/pdftexcmds/pdftexcmds.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/pdftexcmds/pdftexcmds.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/pdftexcmds/pdftexcmds.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/pdftexcmds/pdftexcmds.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/pdftexcmds/pdftexcmds.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/pdftexcmds/pdftexcmds.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/pdftexcmds/pdftexcmds.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/pdftexcmds/pdftexcmds.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/pdftexcmds/pdftexcmds.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/pdftexcmds/pdftexcmds.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/pdftexcmds/pdftexcmds.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/infwarerr/infwarerr.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/infwarerr/infwarerr.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/infwarerr/infwarerr.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/infwarerr/infwarerr.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/infwarerr/infwarerr.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/infwarerr/infwarerr.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/infwarerr/infwarerr.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/infwarerr/infwarerr.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/infwarerr/infwarerr.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/infwarerr/infwarerr.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/infwarerr/infwarerr.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/iftex/iftex.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/infwarerr/infwarerr.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/keyval.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/kvsetkeys/kvsetkeys.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/kvdefinekeys/kvdefinekeys.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/kvdefinekeys/kvdefinekeys.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/kvdefinekeys/kvdefinekeys.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/kvdefinekeys/kvdefinekeys.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/kvdefinekeys/kvdefinekeys.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/kvdefinekeys/kvdefinekeys.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/kvdefinekeys/kvdefinekeys.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/kvdefinekeys/kvdefinekeys.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/kvdefinekeys/kvdefinekeys.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/titlesec/titlesec.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/titlesec/titlesec.sty +INPUT ./sphinxlatexstyletext.sty +INPUT sphinxlatexstyletext.sty +INPUT ./sphinxlatexobjects.sty +INPUT sphinxlatexobjects.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/geometry/geometry.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/iftex/ifvtex.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/iftex/ifvtex.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/iftex/iftex.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/iftex/iftex.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/hyperref.sty INPUT /usr/share/texlive/texmf-dist/tex/generic/kvdefinekeys/kvdefinekeys.sty INPUT /usr/share/texlive/texmf-dist/tex/generic/kvdefinekeys/kvdefinekeys.sty INPUT /usr/share/texlive/texmf-dist/tex/generic/pdfescape/pdfescape.sty INPUT /usr/share/texlive/texmf-dist/tex/generic/pdfescape/pdfescape.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/pdfescape/pdfescape.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/pdfescape/pdfescape.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/pdfescape/pdfescape.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/pdfescape/pdfescape.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/pdfescape/pdfescape.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/pdfescape/pdfescape.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/pdfescape/pdfescape.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/pdfescape/pdfescape.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/pdfescape/pdfescape.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty INPUT /usr/share/texlive/texmf-dist/tex/generic/pdftexcmds/pdftexcmds.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/pdftexcmds/pdftexcmds.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/infwarerr/infwarerr.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/infwarerr/infwarerr.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/hycolor/hycolor.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/hycolor/hycolor.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/hycolor/hycolor.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/hycolor/hycolor.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/hycolor/hycolor.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/hycolor/hycolor.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/hycolor/hycolor.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/hycolor/hycolor.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/hycolor/hycolor.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/hycolor/hycolor.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/hycolor/hycolor.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/letltxmacro/letltxmacro.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/letltxmacro/letltxmacro.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/letltxmacro/letltxmacro.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/letltxmacro/letltxmacro.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/letltxmacro/letltxmacro.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/letltxmacro/letltxmacro.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/letltxmacro/letltxmacro.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/letltxmacro/letltxmacro.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/letltxmacro/letltxmacro.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/letltxmacro/letltxmacro.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/letltxmacro/letltxmacro.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/auxhook/auxhook.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/auxhook/auxhook.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/auxhook/auxhook.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/auxhook/auxhook.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/auxhook/auxhook.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/auxhook/auxhook.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/auxhook/auxhook.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/auxhook/auxhook.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/auxhook/auxhook.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/auxhook/auxhook.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/auxhook/auxhook.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/kvoptions/kvoptions.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/pd1enc.def +INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/nameref.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/nameref.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/refcount/refcount.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/refcount/refcount.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/gettitlestring/gettitlestring.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/gettitlestring/gettitlestring.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/pd1enc.def INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/pd1enc.def INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/pd1enc.def -INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/hyperref-langpatches.def -INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/hyperref-langpatches.def -INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/hyperref-langpatches.def -INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/hyperref-langpatches.def -INPUT /usr/share/texlive/texmf-dist/tex/generic/intcalc/intcalc.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/intcalc/intcalc.sty INPUT /usr/share/texlive/texmf-dist/tex/generic/intcalc/intcalc.sty INPUT /usr/share/texlive/texmf-dist/tex/generic/intcalc/intcalc.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/intcalc/intcalc.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/intcalc/intcalc.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/intcalc/intcalc.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/intcalc/intcalc.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/intcalc/intcalc.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/intcalc/intcalc.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/intcalc/intcalc.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/etexcmds/etexcmds.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/etexcmds/etexcmds.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/etexcmds/etexcmds.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/etexcmds/etexcmds.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/etexcmds/etexcmds.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/etexcmds/etexcmds.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/etexcmds/etexcmds.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/etexcmds/etexcmds.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/etexcmds/etexcmds.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/etexcmds/etexcmds.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/etexcmds/etexcmds.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/infwarerr/infwarerr.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/iftex/iftex.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/puenc.def INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/puenc.def INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/puenc.def INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/puenc.def INPUT /usr/share/texlive/texmf-dist/tex/latex/url/url.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/url/url.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/url/url.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/url/url.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/url/url.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/url/url.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/url/url.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/url/url.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/url/url.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/url/url.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/url/url.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/bitset/bitset.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/bitset/bitset.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/bitset/bitset.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/bitset/bitset.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/bitset/bitset.sty INPUT /usr/share/texlive/texmf-dist/tex/generic/bitset/bitset.sty INPUT /usr/share/texlive/texmf-dist/tex/generic/bitset/bitset.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/bitset/bitset.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/bitset/bitset.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/bitset/bitset.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/bitset/bitset.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/infwarerr/infwarerr.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/intcalc/intcalc.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/bigintcalc/bigintcalc.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/bigintcalc/bigintcalc.sty INPUT /usr/share/texlive/texmf-dist/tex/generic/bigintcalc/bigintcalc.sty INPUT /usr/share/texlive/texmf-dist/tex/generic/bigintcalc/bigintcalc.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/bigintcalc/bigintcalc.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/bigintcalc/bigintcalc.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/bigintcalc/bigintcalc.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/bigintcalc/bigintcalc.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/bigintcalc/bigintcalc.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/bigintcalc/bigintcalc.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/bigintcalc/bigintcalc.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/pdftexcmds/pdftexcmds.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/atbegshi/atbegshi.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/atbegshi/atbegshi.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/atbegshi/atbegshi.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/base/atbegshi-ltx.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/atbegshi/atbegshi.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/atbegshi/atbegshi.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/base/atbegshi-ltx.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/atbegshi/atbegshi.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/base/atbegshi-ltx.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/base/atbegshi-ltx.sty INPUT /usr/share/texlive/texmf-dist/tex/generic/atbegshi/atbegshi.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/atbegshi/atbegshi.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/base/atbegshi-ltx.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/base/atbegshi-ltx.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/atbegshi/atbegshi.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/base/atbegshi-ltx.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/hpdftex.def INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/hpdftex.def INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/hpdftex.def -INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/hpdftex.def -INPUT /usr/share/texlive/texmf-dist/tex/latex/atveryend/atveryend.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/atveryend/atveryend.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/atveryend/atveryend.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/base/atveryend-ltx.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/atveryend/atveryend.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/atveryend/atveryend.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/base/atveryend-ltx.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/atveryend/atveryend.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/base/atveryend-ltx.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/base/atveryend-ltx.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/atveryend/atveryend.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/atveryend/atveryend.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/base/atveryend-ltx.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/base/atveryend-ltx.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/atveryend/atveryend.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/base/atveryend-ltx.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/rerunfilecheck/rerunfilecheck.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/rerunfilecheck/rerunfilecheck.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/rerunfilecheck/rerunfilecheck.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/rerunfilecheck/rerunfilecheck.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/rerunfilecheck/rerunfilecheck.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/rerunfilecheck/rerunfilecheck.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/rerunfilecheck/rerunfilecheck.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/rerunfilecheck/rerunfilecheck.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/rerunfilecheck/rerunfilecheck.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/rerunfilecheck/rerunfilecheck.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/rerunfilecheck/rerunfilecheck.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/kvoptions/kvoptions.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/infwarerr/infwarerr.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/pdftexcmds/pdftexcmds.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/atveryend/atveryend.sty INPUT /usr/share/texlive/texmf-dist/tex/generic/uniquecounter/uniquecounter.sty INPUT /usr/share/texlive/texmf-dist/tex/generic/uniquecounter/uniquecounter.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/uniquecounter/uniquecounter.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/uniquecounter/uniquecounter.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/uniquecounter/uniquecounter.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/uniquecounter/uniquecounter.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/uniquecounter/uniquecounter.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/uniquecounter/uniquecounter.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/uniquecounter/uniquecounter.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/uniquecounter/uniquecounter.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/uniquecounter/uniquecounter.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/bigintcalc/bigintcalc.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/infwarerr/infwarerr.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/oberdiek/hypcap.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/oberdiek/hypcap.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/oberdiek/hypcap.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/oberdiek/hypcap.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/oberdiek/hypcap.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/oberdiek/hypcap.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/oberdiek/hypcap.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/oberdiek/hypcap.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/oberdiek/hypcap.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/oberdiek/hypcap.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/oberdiek/hypcap.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/letltxmacro/letltxmacro.sty -INPUT ./sphinxmessages.sty -INPUT ./sphinxmessages.sty -INPUT sphinxmessages.sty -INPUT ./sphinxmessages.sty -INPUT ./sphinxmessages.sty -INPUT ./sphinxmessages.sty -INPUT ./sphinxmessages.sty -INPUT ./sphinxmessages.sty -INPUT sphinxmessages.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/letltxmacro/letltxmacro.sty INPUT ./sphinxmessages.sty INPUT sphinxmessages.sty OUTPUT DFOLS.idx INPUT /usr/share/texmf/tex/latex/tex-gyre/t1qtm.fd INPUT /usr/share/texmf/tex/latex/tex-gyre/t1qtm.fd INPUT /usr/share/texmf/tex/latex/tex-gyre/t1qtm.fd -INPUT /usr/share/texmf/tex/latex/tex-gyre/t1qtm.fd INPUT /usr/share/texmf/fonts/tfm/public/tex-gyre/ec-qtmr.tfm INPUT /usr/share/texlive/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def INPUT /usr/share/texlive/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def -INPUT /usr/share/texlive/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def -INPUT /usr/share/texlive/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def -INPUT /usr/share/texlive/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def -INPUT /usr/share/texlive/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def -INPUT /usr/share/texlive/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def -INPUT /usr/share/texlive/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def -INPUT /usr/share/texlive/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def -INPUT /usr/share/texlive/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def -INPUT /usr/share/texlive/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def INPUT ./DFOLS.aux -INPUT DFOLS.aux +INPUT ./DFOLS.aux INPUT DFOLS.aux OUTPUT DFOLS.aux INPUT /usr/share/texlive/texmf-dist/tex/context/base/mkii/supp-pdf.mkii INPUT /usr/share/texlive/texmf-dist/tex/context/base/mkii/supp-pdf.mkii INPUT /usr/share/texlive/texmf-dist/tex/context/base/mkii/supp-pdf.mkii -INPUT /usr/share/texlive/texmf-dist/tex/context/base/mkii/supp-pdf.mkii -INPUT /usr/share/texlive/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg INPUT /usr/share/texlive/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg INPUT /usr/share/texlive/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg -INPUT /usr/share/texlive/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg -INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/color.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/nameref.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/nameref.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/nameref.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/nameref.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/nameref.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/nameref.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/nameref.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/nameref.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/nameref.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/nameref.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/nameref.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/refcount/refcount.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/refcount/refcount.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/refcount/refcount.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/refcount/refcount.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/refcount/refcount.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/refcount/refcount.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/refcount/refcount.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/refcount/refcount.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/refcount/refcount.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/refcount/refcount.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/refcount/refcount.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/infwarerr/infwarerr.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/gettitlestring/gettitlestring.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/gettitlestring/gettitlestring.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/gettitlestring/gettitlestring.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/gettitlestring/gettitlestring.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/gettitlestring/gettitlestring.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/gettitlestring/gettitlestring.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/gettitlestring/gettitlestring.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/gettitlestring/gettitlestring.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/gettitlestring/gettitlestring.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/gettitlestring/gettitlestring.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/gettitlestring/gettitlestring.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/kvoptions/kvoptions.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty -INPUT ./DFOLS.out -INPUT DFOLS.out +INPUT /usr/share/texlive/texmf-dist/tex/latex/fontawesome5/fontawesome5.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/l3kernel/expl3.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/l3kernel/expl3.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/l3packages/l3keys2e/l3keys2e.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/l3packages/l3keys2e/l3keys2e.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/l3packages/xparse/xparse.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/l3packages/xparse/xparse.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/fontawesome5/fontawesome5-generic-helper.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/fontawesome5/fontawesome5-generic-helper.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/fontawesome5/fontawesome5-mapping.def +INPUT /usr/share/texlive/texmf-dist/tex/latex/fontawesome5/fontawesome5-mapping.def INPUT ./DFOLS.out -INPUT DFOLS.out INPUT ./DFOLS.out INPUT DFOLS.out -INPUT ./DFOLS.out INPUT DFOLS.out INPUT ./DFOLS.out INPUT ./DFOLS.out @@ -1090,7 +276,6 @@ OUTPUT DFOLS.out INPUT /usr/share/texmf/tex/latex/tex-gyre/t1qhv.fd INPUT /usr/share/texmf/tex/latex/tex-gyre/t1qhv.fd INPUT /usr/share/texmf/tex/latex/tex-gyre/t1qhv.fd -INPUT /usr/share/texmf/tex/latex/tex-gyre/t1qhv.fd INPUT /usr/share/texmf/fonts/tfm/public/tex-gyre/ec-qhvr.tfm INPUT /usr/share/texmf/fonts/tfm/public/tex-gyre/ec-qhvb.tfm INPUT /usr/share/texmf/fonts/tfm/public/tex-gyre/ec-qhvb.tfm @@ -1120,24 +305,23 @@ INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/cm/cmex10.tfm INPUT /usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsa.fd INPUT /usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsa.fd INPUT /usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsa.fd -INPUT /usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsa.fd INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/amsfonts/symbols/msam10.tfm INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/amsfonts/symbols/msam10.tfm INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/amsfonts/symbols/msam10.tfm INPUT /usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsb.fd INPUT /usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsb.fd INPUT /usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsb.fd -INPUT /usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsb.fd INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/amsfonts/symbols/msbm10.tfm INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/amsfonts/symbols/msbm10.tfm INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/amsfonts/symbols/msbm10.tfm INPUT /usr/share/texmf/fonts/tfm/public/tex-gyre/ec-qhvb.tfm INPUT /var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map +INPUT /usr/share/texmf/fonts/enc/dvips/tex-gyre/q-ec.enc INPUT /usr/share/texmf/fonts/tfm/public/tex-gyre/ec-qtmr.tfm INPUT /usr/share/texmf/fonts/tfm/public/tex-gyre/ec-qhvr.tfm INPUT /usr/share/texmf/fonts/tfm/public/tex-gyre/ec-qhvb.tfm INPUT ./DFOLS.toc -INPUT DFOLS.toc +INPUT ./DFOLS.toc INPUT DFOLS.toc INPUT /usr/share/texmf/fonts/tfm/public/tex-gyre/ec-qtmb.tfm INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/amsfonts/cmextra/cmex7.tfm @@ -1153,20 +337,18 @@ INPUT /usr/share/texmf/fonts/tfm/public/tex-gyre/ec-qtmri.tfm INPUT /usr/share/texmf/tex/latex/tex-gyre/ts1qtm.fd INPUT /usr/share/texmf/tex/latex/tex-gyre/ts1qtm.fd INPUT /usr/share/texmf/tex/latex/tex-gyre/ts1qtm.fd -INPUT /usr/share/texmf/tex/latex/tex-gyre/ts1qtm.fd INPUT /usr/share/texmf/fonts/tfm/public/tex-gyre/ts1-qtmr.tfm INPUT /usr/share/texlive/texmf-dist/tex/latex/txfonts/t1txtt.fd INPUT /usr/share/texlive/texmf-dist/tex/latex/txfonts/t1txtt.fd INPUT /usr/share/texlive/texmf-dist/tex/latex/txfonts/t1txtt.fd -INPUT /usr/share/texlive/texmf-dist/tex/latex/txfonts/t1txtt.fd INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/t1xtt.tfm INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/t1xtt.tfm +INPUT /usr/share/texmf/fonts/enc/dvips/tex-gyre/q-ts1.enc INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/t1xbtt.tfm INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/t1xttsl.tfm INPUT /usr/share/texlive/texmf-dist/tex/latex/txfonts/ts1txtt.fd INPUT /usr/share/texlive/texmf-dist/tex/latex/txfonts/ts1txtt.fd INPUT /usr/share/texlive/texmf-dist/tex/latex/txfonts/ts1txtt.fd -INPUT /usr/share/texlive/texmf-dist/tex/latex/txfonts/ts1txtt.fd INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/tcxtt.tfm INPUT /usr/share/texmf/fonts/tfm/public/tex-gyre/ec-qtmr.tfm INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/tcxsl.tfm @@ -1174,25 +356,22 @@ INPUT /usr/share/texlive/texmf-dist/fonts/vf/public/txfonts/tcxsl.vf INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/rtxptmro.tfm INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/rtcxsl.tfm INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/txfonts/rtxptmr.tfm +INPUT /usr/share/texlive/texmf-dist/fonts/enc/dvips/base/8r.enc +INPUT ./data_fitting.png +INPUT ./data_fitting.png INPUT ./data_fitting.png INPUT ./data_fitting.png -INPUT data_fitting.png INPUT ./data_fitting.png INPUT ./data_fitting.png INPUT ./data_fitting.png INPUT ./data_fitting.png -INPUT data_fitting.png INPUT ./data_fitting.png INPUT ./DFOLS.ind -INPUT DFOLS.ind INPUT ./DFOLS.ind INPUT DFOLS.ind INPUT DFOLS.aux INPUT ./DFOLS.out INPUT ./DFOLS.out -INPUT /usr/share/texlive/texmf-dist/fonts/enc/dvips/base/8r.enc -INPUT /usr/share/texmf/fonts/enc/dvips/tex-gyre/q-ts1.enc -INPUT /usr/share/texmf/fonts/enc/dvips/tex-gyre/q-ec.enc INPUT /usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmex10.pfb INPUT /usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmmi10.pfb INPUT /usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmmi5.pfb diff --git a/docs/build/latex/DFOLS.ilg b/docs/build/latex/DFOLS.ilg index ec9a513..231a366 100755 --- a/docs/build/latex/DFOLS.ilg +++ b/docs/build/latex/DFOLS.ilg @@ -1,4 +1,4 @@ -This is makeindex, version 2.15 [TeX Live 2022/dev] (kpathsea + Thai support). +This is makeindex, version 2.17 [TeX Live 2023] (kpathsea + Thai support). Scanning style file ./python.ist.......done (7 attributes redefined, 0 ignored). Scanning input file DFOLS.idx...done (0 entries accepted, 0 rejected). Nothing written in DFOLS.ind. diff --git a/docs/build/latex/DFOLS.log b/docs/build/latex/DFOLS.log index 02fd5dd..f1d1747 100755 --- a/docs/build/latex/DFOLS.log +++ b/docs/build/latex/DFOLS.log @@ -1,36 +1,37 @@ -This is pdfTeX, Version 3.141592653-2.6-1.40.22 (TeX Live 2022/dev/Debian) (preloaded format=pdflatex 2024.4.11) 11 FEB 2025 12:03 +This is pdfTeX, Version 3.141592653-2.6-1.40.25 (TeX Live 2023/Debian) (preloaded format=pdflatex 2025.7.14) 10 SEP 2025 12:04 entering extended mode restricted \write18 enabled. %&-line parsing enabled. **DFOLS.tex (./DFOLS.tex -LaTeX2e <2021-11-15> patch level 1 -L3 programming layer <2022-01-21> (./sphinxmanual.cls +LaTeX2e <2023-11-01> patch level 1 +L3 programming layer <2024-01-22> +(./sphinxmanual.cls Document Class: sphinxmanual 2019/12/01 v2.3.0 Document class (Sphinx manual) (/usr/share/texlive/texmf-dist/tex/latex/base/report.cls -Document Class: report 2021/10/04 v1.4n Standard LaTeX document class +Document Class: report 2023/05/17 v1.4n Standard LaTeX document class (/usr/share/texlive/texmf-dist/tex/latex/base/size10.clo -File: size10.clo 2021/10/04 v1.4n Standard LaTeX file (size option) -) -\c@part=\count185 -\c@chapter=\count186 -\c@section=\count187 -\c@subsection=\count188 -\c@subsubsection=\count189 -\c@paragraph=\count190 -\c@subparagraph=\count191 -\c@figure=\count192 -\c@table=\count193 -\abovecaptionskip=\skip47 -\belowcaptionskip=\skip48 -\bibindent=\dimen138 +File: size10.clo 2023/05/17 v1.4n Standard LaTeX file (size option) +) +\c@part=\count187 +\c@chapter=\count188 +\c@section=\count189 +\c@subsection=\count190 +\c@subsubsection=\count191 +\c@paragraph=\count192 +\c@subparagraph=\count193 +\c@figure=\count194 +\c@table=\count195 +\abovecaptionskip=\skip48 +\belowcaptionskip=\skip49 +\bibindent=\dimen140 ) LaTeX Info: Redefining \and on input line 35. ) (/usr/share/texlive/texmf-dist/tex/latex/base/inputenc.sty Package: inputenc 2021/02/14 v1.3d Input encoding file -\inpenc@prehook=\toks16 -\inpenc@posthook=\toks17 +\inpenc@prehook=\toks17 +\inpenc@posthook=\toks18 ) defining Unicode char U+00A0 (decimal 160) defining Unicode char U+2500 (decimal 9472) @@ -46,8 +47,8 @@ Package: cmap 2021/02/06 v1.0j CMap support: searchable PDF Package: fontenc 2021/04/29 v2.0v Standard LaTeX package <>) (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsmath.sty -Package: amsmath 2021/10/15 v2.17l AMS math features -\@mathmargin=\skip49 +Package: amsmath 2023/05/13 v2.17o AMS math features +\@mathmargin=\skip50 For additional information on amsmath, use the `?' option. (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amstext.sty @@ -55,53 +56,63 @@ Package: amstext 2021/08/26 v2.01 AMS text (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsgen.sty File: amsgen.sty 1999/11/30 v2.0 generic functions -\@emptytoks=\toks18 -\ex@=\dimen139 +\@emptytoks=\toks19 +\ex@=\dimen141 )) (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsbsy.sty Package: amsbsy 1999/11/29 v1.2d Bold Symbols -\pmbraise@=\dimen140 +\pmbraise@=\dimen142 ) (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsopn.sty -Package: amsopn 2021/08/26 v2.02 operator names +Package: amsopn 2022/04/08 v2.04 operator names ) -\inf@bad=\count194 +\inf@bad=\count196 LaTeX Info: Redefining \frac on input line 234. -\uproot@=\count195 -\leftroot@=\count196 +\uproot@=\count197 +\leftroot@=\count198 LaTeX Info: Redefining \overline on input line 399. -\classnum@=\count197 -\DOTSCASE@=\count198 +LaTeX Info: Redefining \colon on input line 410. +\classnum@=\count199 +\DOTSCASE@=\count266 LaTeX Info: Redefining \ldots on input line 496. LaTeX Info: Redefining \dots on input line 499. LaTeX Info: Redefining \cdots on input line 620. -\Mathstrutbox@=\box50 -\strutbox@=\box51 -\big@size=\dimen141 +\Mathstrutbox@=\box51 +\strutbox@=\box52 +LaTeX Info: Redefining \big on input line 722. +LaTeX Info: Redefining \Big on input line 723. +LaTeX Info: Redefining \bigg on input line 724. +LaTeX Info: Redefining \Bigg on input line 725. +\big@size=\dimen143 LaTeX Font Info: Redeclaring font encoding OML on input line 743. LaTeX Font Info: Redeclaring font encoding OMS on input line 744. -\macc@depth=\count199 -\c@MaxMatrixCols=\count266 +\macc@depth=\count267 +LaTeX Info: Redefining \bmod on input line 905. +LaTeX Info: Redefining \pmod on input line 910. +LaTeX Info: Redefining \smash on input line 940. +LaTeX Info: Redefining \relbar on input line 970. +LaTeX Info: Redefining \Relbar on input line 971. +\c@MaxMatrixCols=\count268 \dotsspace@=\muskip16 -\c@parentequation=\count267 -\dspbrk@lvl=\count268 -\tag@help=\toks19 -\row@=\count269 -\column@=\count270 -\maxfields@=\count271 -\andhelp@=\toks20 -\eqnshift@=\dimen142 -\alignsep@=\dimen143 -\tagshift@=\dimen144 -\tagwidth@=\dimen145 -\totwidth@=\dimen146 -\lineht@=\dimen147 -\@envbody=\toks21 -\multlinegap=\skip50 -\multlinetaggap=\skip51 -\mathdisplay@stack=\toks22 -LaTeX Info: Redefining \[ on input line 2938. -LaTeX Info: Redefining \] on input line 2939. +\c@parentequation=\count269 +\dspbrk@lvl=\count270 +\tag@help=\toks20 +\row@=\count271 +\column@=\count272 +\maxfields@=\count273 +\andhelp@=\toks21 +\eqnshift@=\dimen144 +\alignsep@=\dimen145 +\tagshift@=\dimen146 +\tagwidth@=\dimen147 +\totwidth@=\dimen148 +\lineht@=\dimen149 +\@envbody=\toks22 +\multlinegap=\skip51 +\multlinetaggap=\skip52 +\mathdisplay@stack=\toks23 +LaTeX Info: Redefining \[ on input line 2953. +LaTeX Info: Redefining \] on input line 2954. ) (/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amssymb.sty Package: amssymb 2013/01/14 v3.01 AMS font symbols @@ -115,14 +126,14 @@ LaTeX Font Info: Overwriting math alphabet `\mathfrak' in version `bold' (Font) U/euf/m/n --> U/euf/b/n on input line 106. )) (/usr/share/texlive/texmf-dist/tex/generic/babel/babel.sty -Package: babel 2022/01/26 3.70 The Babel package -\babel@savecnt=\count272 -\U@D=\dimen148 -\l@unhyphenated=\language3 +Package: babel 2024/01/07 v24.1 The Babel package +\babel@savecnt=\count274 +\U@D=\dimen150 +\l@unhyphenated=\language5 (/usr/share/texlive/texmf-dist/tex/generic/babel/txtbabel.def) \bbl@readstream=\read2 -\bbl@dirlevel=\count273 +\bbl@dirlevel=\count275 (/usr/share/texlive/texmf-dist/tex/generic/babel-english/english.ldf Language: english 2017/06/06 v3.3r English support from the babel system @@ -137,112 +148,116 @@ Package babel Info: Hyphen rules for 'australian' set to \l@english Package babel Info: Hyphen rules for 'newzealand' set to \l@english (babel) (\language0). Reported on input line 108. )) +(/usr/share/texlive/texmf-dist/tex/generic/babel/locale/en/babel-english.tex +Package babel Info: Importing font and identification data for english +(babel) from babel-en.ini. Reported on input line 11. +) (/usr/share/texmf/tex/latex/tex-gyre/tgtermes.sty Package: tgtermes 2009/09/27 v1.2 TeX Gyre Termes as default roman family (/usr/share/texlive/texmf-dist/tex/latex/kvoptions/kvoptions.sty -Package: kvoptions 2020-10-07 v3.14 Key value format for package options (HO) +Package: kvoptions 2022-06-15 v3.15 Key value format for package options (HO) (/usr/share/texlive/texmf-dist/tex/latex/graphics/keyval.sty -Package: keyval 2014/10/28 v1.15 key=value parser (DPC) -\KV@toks@=\toks23 +Package: keyval 2022/05/29 v1.15 key=value parser (DPC) +\KV@toks@=\toks24 ) (/usr/share/texlive/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty -Package: ltxcmds 2020-05-10 v1.25 LaTeX kernel commands for general use (HO) +Package: ltxcmds 2023-12-04 v1.26 LaTeX kernel commands for general use (HO) ) -(/usr/share/texlive/texmf-dist/tex/generic/kvsetkeys/kvsetkeys.sty -Package: kvsetkeys 2019/12/15 v1.18 Key value parser (HO) +(/usr/share/texlive/texmf-dist/tex/latex/kvsetkeys/kvsetkeys.sty +Package: kvsetkeys 2022-10-05 v1.19 Key value parser (HO) ))) (/usr/share/texmf/tex/latex/tex-gyre/tgheros.sty Package: tgheros 2009/09/27 v1.2 TeX Gyre Heros as default sans serif family ) (/usr/share/texlive/texmf-dist/tex/latex/fncychap/fncychap.sty Package: fncychap 2007/07/30 v1.34 LaTeX package (Revised chapters) -\RW=\skip52 -\mylen=\skip53 -\myhi=\skip54 -\px=\skip55 -\py=\skip56 -\pyy=\skip57 -\pxx=\skip58 -\c@AlphaCnt=\count274 -\c@AlphaDecCnt=\count275 +\RW=\skip53 +\mylen=\skip54 +\myhi=\skip55 +\px=\skip56 +\py=\skip57 +\pyy=\skip58 +\pxx=\skip59 +\c@AlphaCnt=\count276 +\c@AlphaDecCnt=\count277 ) (./sphinx.sty -Package: sphinx 2023/03/19 v6.2.0 LaTeX package (Sphinx markup) +Package: sphinx 2024/11/23 v8.2.0 Sphinx LaTeX package (sphinx-doc) (/usr/share/texlive/texmf-dist/tex/latex/xcolor/xcolor.sty -Package: xcolor 2021/10/31 v2.13 LaTeX color extensions (UK) +Package: xcolor 2023/11/15 v3.01 LaTeX color extensions (UK) (/usr/share/texlive/texmf-dist/tex/latex/graphics-cfg/color.cfg File: color.cfg 2016/01/02 v1.6 sample color configuration ) -Package xcolor Info: Driver file: pdftex.def on input line 227. +Package xcolor Info: Driver file: pdftex.def on input line 274. (/usr/share/texlive/texmf-dist/tex/latex/graphics-def/pdftex.def -File: pdftex.def 2020/10/05 v1.2a Graphics/color driver for pdftex -) -Package xcolor Info: Model `cmy' substituted by `cmy0' on input line 1352. -Package xcolor Info: Model `hsb' substituted by `rgb' on input line 1356. -Package xcolor Info: Model `RGB' extended on input line 1368. -Package xcolor Info: Model `HTML' substituted by `rgb' on input line 1370. -Package xcolor Info: Model `Hsb' substituted by `hsb' on input line 1371. -Package xcolor Info: Model `tHsb' substituted by `hsb' on input line 1372. -Package xcolor Info: Model `HSB' substituted by `hsb' on input line 1373. -Package xcolor Info: Model `Gray' substituted by `gray' on input line 1374. -Package xcolor Info: Model `wave' substituted by `hsb' on input line 1375. +File: pdftex.def 2022/09/22 v1.2b Graphics/color driver for pdftex +) +(/usr/share/texlive/texmf-dist/tex/latex/graphics/mathcolor.ltx) +Package xcolor Info: Model `cmy' substituted by `cmy0' on input line 1350. +Package xcolor Info: Model `hsb' substituted by `rgb' on input line 1354. +Package xcolor Info: Model `RGB' extended on input line 1366. +Package xcolor Info: Model `HTML' substituted by `rgb' on input line 1368. +Package xcolor Info: Model `Hsb' substituted by `hsb' on input line 1369. +Package xcolor Info: Model `tHsb' substituted by `hsb' on input line 1370. +Package xcolor Info: Model `HSB' substituted by `hsb' on input line 1371. +Package xcolor Info: Model `Gray' substituted by `gray' on input line 1372. +Package xcolor Info: Model `wave' substituted by `hsb' on input line 1373. ) (./sphinxoptionshyperref.sty -File: sphinxoptionshyperref.sty 2021/01/27 hyperref +Package: sphinxoptionshyperref 2021/01/27 hyperref ) (./sphinxoptionsgeometry.sty -File: sphinxoptionsgeometry.sty 2021/01/27 geometry +Package: sphinxoptionsgeometry 2021/01/27 geometry ) (/usr/share/texlive/texmf-dist/tex/latex/base/textcomp.sty Package: textcomp 2020/02/02 v2.0n Standard LaTeX package ) (/usr/share/texlive/texmf-dist/tex/latex/float/float.sty Package: float 2001/11/08 v1.3d Float enhancements (AL) -\c@float@type=\count276 -\float@exts=\toks24 -\float@box=\box52 -\@float@everytoks=\toks25 -\@floatcapt=\box53 +\c@float@type=\count278 +\float@exts=\toks25 +\float@box=\box53 +\@float@everytoks=\toks26 +\@floatcapt=\box54 ) (/usr/share/texlive/texmf-dist/tex/latex/wrapfig/wrapfig.sty -\wrapoverhang=\dimen149 -\WF@size=\dimen150 -\c@WF@wrappedlines=\count277 -\WF@box=\box54 -\WF@everypar=\toks26 +\wrapoverhang=\dimen151 +\WF@size=\dimen152 +\c@WF@wrappedlines=\count279 +\WF@box=\box55 +\WF@everypar=\toks27 Package: wrapfig 2003/01/31 v 3.6 ) (/usr/share/texlive/texmf-dist/tex/latex/capt-of/capt-of.sty Package: capt-of 2009/12/29 v0.2 standard captions outside of floats ) (/usr/share/texlive/texmf-dist/tex/latex/tools/multicol.sty -Package: multicol 2021/10/28 v1.9b multicolumn formatting (FMi) -\c@tracingmulticols=\count278 -\mult@box=\box55 -\multicol@leftmargin=\dimen151 -\c@unbalance=\count279 -\c@collectmore=\count280 -\doublecol@number=\count281 -\multicoltolerance=\count282 -\multicolpretolerance=\count283 -\full@width=\dimen152 -\page@free=\dimen153 -\premulticols=\dimen154 -\postmulticols=\dimen155 -\multicolsep=\skip59 -\multicolbaselineskip=\skip60 -\partial@page=\box56 -\last@line=\box57 -\maxbalancingoverflow=\dimen156 -\mult@rightbox=\box58 -\mult@grightbox=\box59 -\mult@firstbox=\box60 -\mult@gfirstbox=\box61 -\@tempa=\box62 -\@tempa=\box63 +Package: multicol 2023/03/30 v1.9f multicolumn formatting (FMi) +\c@tracingmulticols=\count280 +\mult@box=\box56 +\multicol@leftmargin=\dimen153 +\c@unbalance=\count281 +\c@collectmore=\count282 +\doublecol@number=\count283 +\multicoltolerance=\count284 +\multicolpretolerance=\count285 +\full@width=\dimen154 +\page@free=\dimen155 +\premulticols=\dimen156 +\postmulticols=\dimen157 +\multicolsep=\skip60 +\multicolbaselineskip=\skip61 +\partial@page=\box57 +\last@line=\box58 +\mc@boxedresult=\box59 +\maxbalancingoverflow=\dimen158 +\mult@rightbox=\box60 +\mult@grightbox=\box61 +\mult@firstbox=\box62 +\mult@gfirstbox=\box63 \@tempa=\box64 \@tempa=\box65 \@tempa=\box66 @@ -277,21 +292,23 @@ Package: multicol 2021/10/28 v1.9b multicolumn formatting (FMi) \@tempa=\box95 \@tempa=\box96 \@tempa=\box97 -\c@minrows=\count284 -\c@columnbadness=\count285 -\c@finalcolumnbadness=\count286 -\last@try=\dimen157 -\multicolovershoot=\dimen158 -\multicolundershoot=\dimen159 -\mult@nat@firstbox=\box98 -\colbreak@box=\box99 -\mc@col@check@num=\count287 +\@tempa=\box98 +\@tempa=\box99 +\c@minrows=\count286 +\c@columnbadness=\count287 +\c@finalcolumnbadness=\count288 +\last@try=\dimen159 +\multicolovershoot=\dimen160 +\multicolundershoot=\dimen161 +\mult@nat@firstbox=\box100 +\colbreak@box=\box101 +\mc@col@check@num=\count289 ) (/usr/share/texlive/texmf-dist/tex/latex/graphics/graphicx.sty Package: graphicx 2021/09/16 v1.2d Enhanced LaTeX Graphics (DPC,SPQR) (/usr/share/texlive/texmf-dist/tex/latex/graphics/graphics.sty -Package: graphics 2021/03/04 v1.4d Standard LaTeX Graphics (DPC,SPQR) +Package: graphics 2022/03/10 v1.4e Standard LaTeX Graphics (DPC,SPQR) (/usr/share/texlive/texmf-dist/tex/latex/graphics/trig.sty Package: trig 2021/08/11 v1.11 sin cos tan (DPC) @@ -301,15 +318,15 @@ File: graphics.cfg 2016/06/04 v1.11 sample graphics configuration ) Package graphics Info: Driver file: pdftex.def on input line 107. ) -\Gin@req@height=\dimen160 -\Gin@req@width=\dimen161 +\Gin@req@height=\dimen162 +\Gin@req@width=\dimen163 ) (./sphinxlatexgraphics.sty -File: sphinxlatexgraphics.sty 2021/01/27 graphics -\spx@image@maxheight=\dimen162 -\spx@image@box=\box100 +Package: sphinxlatexgraphics 2024/08/13 v8.1.0 graphics +\spx@image@maxheight=\dimen164 +\spx@image@box=\box102 ) (./sphinxpackageboxes.sty -Package: sphinxpackageboxes 2023/03/19 v6.2.0 advanced colored boxes +Package: sphinxpackageboxes 2024/07/01 v7.4.0 advanced colored boxes (/usr/share/texlive/texmf-dist/tex/latex/pict2e/pict2e.sty Package: pict2e 2020/09/30 v0.4b Improved picture commands (HjG,RN,JT) @@ -323,65 +340,72 @@ Package pict2e Info: Driver file for pict2e: p2e-pdftex.def on input line 114. (/usr/share/texlive/texmf-dist/tex/latex/pict2e/p2e-pdftex.def File: p2e-pdftex.def 2016/02/05 v0.1u Driver-dependant file (RN,HjG,JT) ) -\pIIe@GRAPH=\toks27 -\@arclen=\dimen163 -\@arcrad=\dimen164 -\pIIe@tempdima=\dimen165 -\pIIe@tempdimb=\dimen166 -\pIIe@tempdimc=\dimen167 -\pIIe@tempdimd=\dimen168 -\pIIe@tempdime=\dimen169 -\pIIe@tempdimf=\dimen170 +\pIIe@GRAPH=\toks28 +\@arclen=\dimen165 +\@arcrad=\dimen166 +\pIIe@tempdima=\dimen167 +\pIIe@tempdimb=\dimen168 +\pIIe@tempdimc=\dimen169 +\pIIe@tempdimd=\dimen170 +\pIIe@tempdime=\dimen171 +\pIIe@tempdimf=\dimen172 ) (/usr/share/texlive/texmf-dist/tex/latex/ellipse/ellipse.sty Package: ellipse 2004/11/05 v1.0 .dtx ellipse file ) -\@tempdimd=\dimen171 -\spx@tempboxa=\box101 -\spx@tempboxb=\box102 -\spx@boxes@border=\dimen172 -\spx@boxes@border@top=\dimen173 -\spx@boxes@border@right=\dimen174 -\spx@boxes@border@bottom=\dimen175 -\spx@boxes@border@left=\dimen176 -\spx@boxes@padding@top=\dimen177 -\spx@boxes@padding@right=\dimen178 -\spx@boxes@padding@bottom=\dimen179 -\spx@boxes@padding@left=\dimen180 -\spx@boxes@shadow@xoffset=\dimen181 -\spx@boxes@shadow@yoffset=\dimen182 -\spx@boxes@radius@topleft@x=\dimen183 -\spx@boxes@radius@topright@x=\dimen184 -\spx@boxes@radius@bottomright@x=\dimen185 -\spx@boxes@radius@bottomleft@x=\dimen186 -\spx@boxes@radius@topleft@y=\dimen187 -\spx@boxes@radius@topright@y=\dimen188 -\spx@boxes@radius@bottomright@y=\dimen189 -\spx@boxes@radius@bottomleft@y=\dimen190 +\@tempdimd=\dimen173 +\spx@tempboxa=\box103 +\spx@tempboxb=\box104 +\spx@boxes@border@top=\dimen174 +\spx@boxes@border@right=\dimen175 +\spx@boxes@border@bottom=\dimen176 +\spx@boxes@border@left=\dimen177 +\spx@boxes@padding@top=\dimen178 +\spx@boxes@padding@right=\dimen179 +\spx@boxes@padding@bottom=\dimen180 +\spx@boxes@padding@left=\dimen181 +\spx@boxes@shadow@xoffset=\dimen182 +\spx@boxes@shadow@yoffset=\dimen183 +\spx@boxes@radius@topleft@x=\dimen184 +\spx@boxes@radius@topright@x=\dimen185 +\spx@boxes@radius@bottomright@x=\dimen186 +\spx@boxes@radius@bottomleft@x=\dimen187 +\spx@boxes@radius@topleft@y=\dimen188 +\spx@boxes@radius@topright@y=\dimen189 +\spx@boxes@radius@bottomright@y=\dimen190 +\spx@boxes@radius@bottomleft@y=\dimen191 ) (./sphinxlatexadmonitions.sty -File: sphinxlatexadmonitions.sty 2023/03/19 admonitions +Package: sphinxlatexadmonitions 2024/10/11 v8.1.1 admonitions (/usr/share/texlive/texmf-dist/tex/latex/framed/framed.sty Package: framed 2011/10/22 v 0.96: framed or shaded text with page breaks -\OuterFrameSep=\skip61 -\fb@frw=\dimen191 -\fb@frh=\dimen192 -\FrameRule=\dimen193 -\FrameSep=\dimen194 -) -\spx@notice@border=\dimen195 +\OuterFrameSep=\skip62 +\fb@frw=\dimen192 +\fb@frh=\dimen193 +\FrameRule=\dimen194 +\FrameSep=\dimen195 +) +(./sphinxpackagefootnote.sty +Package: sphinxpackagefootnote 2024/05/17 v7.3.x Sphinx custom footnotehyper pa +ckage (Sphinx team) +\FNH@notes=\box105 +\FNH@toks=\toks29 +\FNH@width=\dimen196 +\c@sphinxfootnotemark=\count290 ) -(./sphinxlatexliterals.sty -File: sphinxlatexliterals.sty 2023/04/01 code-blocks and parsed literals +\spx@notice@border=\dimen197 +\c@sphinxtodo=\count291 +) (./sphinxlatexliterals.sty +Package: sphinxlatexliterals 2024/07/01 v7.4.0 code-blocks and parsed literals (/usr/share/texlive/texmf-dist/tex/latex/fancyvrb/fancyvrb.sty -Package: fancyvrb 2021/12/21 4.1b verbatim text (tvz,hv) -\FV@CodeLineNo=\count288 +Package: fancyvrb 2024/01/20 4.5c verbatim text (tvz,hv) +\FV@CodeLineNo=\count292 \FV@InFile=\read3 -\FV@TabBox=\box103 -\c@FancyVerbLine=\count289 -\FV@StepNumber=\count290 +\FV@TabBox=\box106 +\c@FancyVerbLine=\count293 +\FV@StepNumber=\count294 \FV@OutFile=\write3 ) (/usr/share/texlive/texmf-dist/tex/latex/base/alltt.sty @@ -394,162 +418,154 @@ tim (/usr/share/texlive/texmf-dist/tex/latex/needspace/needspace.sty Package: needspace 2010/09/12 v1.3d reserve vertical space ) -\sphinxcontinuationbox=\box104 -\sphinxvisiblespacebox=\box105 -\sphinxVerbatim@TitleBox=\box106 -\sphinxVerbatim@ContentsBox=\box107 +\sphinxcontinuationbox=\box107 +\sphinxvisiblespacebox=\box108 +\sphinxVerbatim@TitleBox=\box109 +\sphinxVerbatim@ContentsBox=\box110 ) (./sphinxlatexshadowbox.sty -File: sphinxlatexshadowbox.sty 2023/03/19 sphinxShadowBox +Package: sphinxlatexshadowbox 2024/07/28 v8.1.0 sphinxShadowBox ) (./sphinxlatexcontainers.sty -File: sphinxlatexcontainers.sty 2021/05/03 containers +Package: sphinxlatexcontainers 2021/05/03 containers ) (./sphinxhighlight.sty Package: sphinxhighlight 2022/06/30 stylesheet for highlighting with pygments ) (./sphinxlatextables.sty -File: sphinxlatextables.sty 2022/08/15 tables +Package: sphinxlatextables 2024/07/01 v7.4.0 tables (/usr/share/texlive/texmf-dist/tex/latex/tabulary/tabulary.sty Package: tabulary 2014/06/11 v0.10 tabulary package (DPC) (/usr/share/texlive/texmf-dist/tex/latex/tools/array.sty -Package: array 2021/10/04 v2.5f Tabular extension package (FMi) -\col@sep=\dimen196 -\ar@mcellbox=\box108 -\extrarowheight=\dimen197 -\NC@list=\toks28 -\extratabsurround=\skip62 -\backup@length=\skip63 -\ar@cellbox=\box109 -) -\TY@count=\count291 -\TY@linewidth=\dimen198 -\tymin=\dimen199 -\tymax=\dimen256 -\TY@tablewidth=\dimen257 +Package: array 2023/10/16 v2.5g Tabular extension package (FMi) +\col@sep=\dimen198 +\ar@mcellbox=\box111 +\extrarowheight=\dimen199 +\NC@list=\toks30 +\extratabsurround=\skip63 +\backup@length=\skip64 +\ar@cellbox=\box112 +) +\TY@count=\count295 +\TY@linewidth=\dimen256 +\tymin=\dimen257 +\tymax=\dimen258 +\TY@tablewidth=\dimen259 ) (/usr/share/texlive/texmf-dist/tex/latex/tools/longtable.sty -Package: longtable 2021-09-01 v4.17 Multi-page Table package (DPC) -\LTleft=\skip64 -\LTright=\skip65 -\LTpre=\skip66 -\LTpost=\skip67 -\LTchunksize=\count292 -\LTcapwidth=\dimen258 -\LT@head=\box110 -\LT@firsthead=\box111 -\LT@foot=\box112 -\LT@lastfoot=\box113 -\LT@gbox=\box114 -\LT@cols=\count293 -\LT@rows=\count294 -\c@LT@tables=\count295 -\c@LT@chunks=\count296 -\LT@p@ftn=\toks29 +Package: longtable 2023-11-01 v4.19 Multi-page Table package (DPC) +\LTleft=\skip65 +\LTright=\skip66 +\LTpre=\skip67 +\LTpost=\skip68 +\LTchunksize=\count296 +\LTcapwidth=\dimen260 +\LT@head=\box113 +\LT@firsthead=\box114 +\LT@foot=\box115 +\LT@lastfoot=\box116 +\LT@gbox=\box117 +\LT@cols=\count297 +\LT@rows=\count298 +\c@LT@tables=\count299 +\c@LT@chunks=\count300 +\LT@p@ftn=\toks31 ) (/usr/share/texlive/texmf-dist/tex/latex/varwidth/varwidth.sty Package: varwidth 2009/03/30 ver 0.92; Variable-width minipages -\@vwid@box=\box115 -\sift@deathcycles=\count297 -\@vwid@loff=\dimen259 -\@vwid@roff=\dimen260 +\@vwid@box=\box118 +\sift@deathcycles=\count301 +\@vwid@loff=\dimen261 +\@vwid@roff=\dimen262 ) -\sphinx@TY@tablewidth=\dimen261 +\sphinx@TY@tablewidth=\dimen263 (/usr/share/texlive/texmf-dist/tex/latex/colortbl/colortbl.sty -Package: colortbl 2020/01/04 v1.0e Color table columns (DPC) -\everycr=\toks30 -\minrowclearance=\skip68 +Package: colortbl 2022/06/20 v1.0f Color table columns (DPC) +\everycr=\toks32 +\minrowclearance=\skip69 +\rownum=\count302 ) -\rownum=\count298 - (/usr/share/texlive/texmf-dist/tex/latex/booktabs/booktabs.sty Package: booktabs 2020/01/12 v1.61803398 Publication quality tables -\heavyrulewidth=\dimen262 -\lightrulewidth=\dimen263 -\cmidrulewidth=\dimen264 -\belowrulesep=\dimen265 -\belowbottomsep=\dimen266 -\aboverulesep=\dimen267 -\abovetopsep=\dimen268 -\cmidrulesep=\dimen269 -\cmidrulekern=\dimen270 -\defaultaddspace=\dimen271 -\@cmidla=\count299 -\@cmidlb=\count300 -\@aboverulesep=\dimen272 -\@belowrulesep=\dimen273 -\@thisruleclass=\count301 -\@lastruleclass=\count302 -\@thisrulewidth=\dimen274 +\heavyrulewidth=\dimen264 +\lightrulewidth=\dimen265 +\cmidrulewidth=\dimen266 +\belowrulesep=\dimen267 +\belowbottomsep=\dimen268 +\aboverulesep=\dimen269 +\abovetopsep=\dimen270 +\cmidrulesep=\dimen271 +\cmidrulekern=\dimen272 +\defaultaddspace=\dimen273 +\@cmidla=\count303 +\@cmidlb=\count304 +\@aboverulesep=\dimen274 +\@belowrulesep=\dimen275 +\@thisruleclass=\count305 +\@lastruleclass=\count306 +\@thisrulewidth=\dimen276 )) (./sphinxlatexnumfig.sty -File: sphinxlatexnumfig.sty 2021/01/27 numbering +Package: sphinxlatexnumfig 2024/07/31 v8.1.0 numbering ) (./sphinxlatexlists.sty -File: sphinxlatexlists.sty 2021/12/20 lists -\spx@lineitemlabel=\toks31 +Package: sphinxlatexlists 2021/12/20 lists +\spx@lineitemlabel=\toks33 ) -\c@sphinxscope=\count303 - (./sphinxpackagefootnote.sty -Package: sphinxpackagefootnote 2022/08/15 v5.3.0 Sphinx custom footnotehyper pa -ckage (Sphinx team) -\FNH@notes=\box116 -\FNH@toks=\toks32 -\FNH@width=\dimen275 -\c@sphinxfootnotemark=\count304 -) (./sphinxlatexindbibtoc.sty -File: sphinxlatexindbibtoc.sty 2021/01/27 index, bib., toc +\c@sphinxscope=\count307 + (./sphinxlatexindbibtoc.sty +Package: sphinxlatexindbibtoc 2021/01/27 index, bib., toc (/usr/share/texlive/texmf-dist/tex/latex/base/makeidx.sty Package: makeidx 2021/10/04 v1.0m Standard LaTeX package )) (./sphinxlatexstylepage.sty -File: sphinxlatexstylepage.sty 2021/01/27 page styling +Package: sphinxlatexstylepage 2021/01/27 page styling (/usr/share/texlive/texmf-dist/tex/latex/parskip/parskip.sty -Rollback for package 'parskip' requested -> version 'v1'. - This corresponds to the release introduced on 2001-04-09. +Package: parskip 2021-03-14 v2.0h non-zero parskip adjustments -(/usr/share/texlive/texmf-dist/tex/latex/parskip/parskip-2001-04-09.sty -Package: parskip 2001/04/09 non-zero parskip adjustments +(/usr/share/texlive/texmf-dist/tex/latex/etoolbox/etoolbox.sty +Package: etoolbox 2020/10/05 v2.5k e-TeX tools for LaTeX (JAW) +\etb@tempcnta=\count308 )) (/usr/share/texlive/texmf-dist/tex/latex/fancyhdr/fancyhdr.sty -Package: fancyhdr 2021/01/28 v4.0.1 Extensive control of page headers and foote -rs -\f@nch@headwidth=\skip69 -\f@nch@O@elh=\skip70 -\f@nch@O@erh=\skip71 -\f@nch@O@olh=\skip72 -\f@nch@O@orh=\skip73 -\f@nch@O@elf=\skip74 -\f@nch@O@erf=\skip75 -\f@nch@O@olf=\skip76 -\f@nch@O@orf=\skip77 +Package: fancyhdr 2022/11/09 v4.1 Extensive control of page headers and footers + +\f@nch@headwidth=\skip70 +\f@nch@O@elh=\skip71 +\f@nch@O@erh=\skip72 +\f@nch@O@olh=\skip73 +\f@nch@O@orh=\skip74 +\f@nch@O@elf=\skip75 +\f@nch@O@erf=\skip76 +\f@nch@O@olf=\skip77 +\f@nch@O@orf=\skip78 )) (./sphinxlatexstyleheadings.sty -File: sphinxlatexstyleheadings.sty 2023/02/11 headings +Package: sphinxlatexstyleheadings 2023/02/11 headings (/usr/share/texlive/texmf-dist/tex/latex/titlesec/titlesec.sty -Package: titlesec 2021/07/05 v2.14 Sectioning titles -\ttl@box=\box117 -\beforetitleunit=\skip78 -\aftertitleunit=\skip79 -\ttl@plus=\dimen276 -\ttl@minus=\dimen277 -\ttl@toksa=\toks33 -\titlewidth=\dimen278 -\titlewidthlast=\dimen279 -\titlewidthfirst=\dimen280 +Package: titlesec 2023/10/27 v2.16 Sectioning titles +\ttl@box=\box119 +\beforetitleunit=\skip79 +\aftertitleunit=\skip80 +\ttl@plus=\dimen277 +\ttl@minus=\dimen278 +\ttl@toksa=\toks34 +\titlewidth=\dimen279 +\titlewidthlast=\dimen280 +\titlewidthfirst=\dimen281 )) (./sphinxlatexstyletext.sty -File: sphinxlatexstyletext.sty 2023/07/23 text styling +Package: sphinxlatexstyletext 2024/07/28 v8.1.0 text styling ) (./sphinxlatexobjects.sty -File: sphinxlatexobjects.sty 2023/07/23 documentation environments -\sphinxsignaturesep=\skip80 -\sphinxsignaturelistskip=\skip81 -\py@argswidth=\skip82 -\lineblockindentation=\skip83 -\DUlineblockindent=\skip84 +Package: sphinxlatexobjects 2025/02/11 documentation environments +\sphinxsignaturesep=\skip81 +\sphinxsignaturelistskip=\skip82 +\py@argswidth=\skip83 +\lineblockindentation=\skip84 +\DUlineblockindent=\skip85 )) (/usr/share/texlive/texmf-dist/tex/latex/geometry/geometry.sty Package: geometry 2020/01/02 v5.9 Page Geometry @@ -558,23 +574,29 @@ Package: geometry 2020/01/02 v5.9 Page Geometry Package: ifvtex 2019/10/25 v1.7 ifvtex legacy package. Use iftex instead. (/usr/share/texlive/texmf-dist/tex/generic/iftex/iftex.sty -Package: iftex 2020/03/06 v1.0d TeX engine tests +Package: iftex 2022/02/03 v1.0f TeX engine tests )) -\Gm@cnth=\count305 -\Gm@cntv=\count306 -\c@Gm@tempcnt=\count307 -\Gm@bindingoffset=\dimen281 -\Gm@wd@mp=\dimen282 -\Gm@odd@mp=\dimen283 -\Gm@even@mp=\dimen284 -\Gm@layoutwidth=\dimen285 -\Gm@layoutheight=\dimen286 -\Gm@layouthoffset=\dimen287 -\Gm@layoutvoffset=\dimen288 -\Gm@dimlist=\toks34 +\Gm@cnth=\count309 +\Gm@cntv=\count310 +\c@Gm@tempcnt=\count311 +\Gm@bindingoffset=\dimen282 +\Gm@wd@mp=\dimen283 +\Gm@odd@mp=\dimen284 +\Gm@even@mp=\dimen285 +\Gm@layoutwidth=\dimen286 +\Gm@layoutheight=\dimen287 +\Gm@layouthoffset=\dimen288 +\Gm@layoutvoffset=\dimen289 +\Gm@dimlist=\toks35 ) (/usr/share/texlive/texmf-dist/tex/latex/hyperref/hyperref.sty -Package: hyperref 2021-06-07 v7.00m Hypertext links for LaTeX +Package: hyperref 2024-01-20 v7.01h Hypertext links for LaTeX + +(/usr/share/texlive/texmf-dist/tex/generic/kvdefinekeys/kvdefinekeys.sty +Package: kvdefinekeys 2019-12-19 v1.6 Define keys (HO) +) +(/usr/share/texlive/texmf-dist/tex/generic/pdfescape/pdfescape.sty +Package: pdfescape 2019/12/09 v1.15 Implements pdfTeX's escape features (HO) (/usr/share/texlive/texmf-dist/tex/generic/pdftexcmds/pdftexcmds.sty Package: pdftexcmds 2020-06-27 v0.33 Utility functions of pdfTeX for LuaTeX (HO @@ -586,66 +608,61 @@ Package: infwarerr 2019/12/03 v1.5 Providing info/warning/error messages (HO) Package pdftexcmds Info: \pdf@primitive is available. Package pdftexcmds Info: \pdf@ifprimitive is available. Package pdftexcmds Info: \pdfdraftmode found. -) -(/usr/share/texlive/texmf-dist/tex/generic/kvdefinekeys/kvdefinekeys.sty -Package: kvdefinekeys 2019-12-19 v1.6 Define keys (HO) -) -(/usr/share/texlive/texmf-dist/tex/generic/pdfescape/pdfescape.sty -Package: pdfescape 2019/12/09 v1.15 Implements pdfTeX's escape features (HO) -) +)) (/usr/share/texlive/texmf-dist/tex/latex/hycolor/hycolor.sty Package: hycolor 2020-01-27 v1.10 Color options for hyperref/bookmark (HO) ) -(/usr/share/texlive/texmf-dist/tex/latex/letltxmacro/letltxmacro.sty -Package: letltxmacro 2019/12/03 v1.6 Let assignment for LaTeX macros (HO) -) (/usr/share/texlive/texmf-dist/tex/latex/auxhook/auxhook.sty Package: auxhook 2019-12-17 v1.6 Hooks for auxiliary files (HO) ) -\@linkdim=\dimen289 -\Hy@linkcounter=\count308 -\Hy@pagecounter=\count309 +(/usr/share/texlive/texmf-dist/tex/latex/hyperref/nameref.sty +Package: nameref 2023-11-26 v2.56 Cross-referencing by name of section + +(/usr/share/texlive/texmf-dist/tex/latex/refcount/refcount.sty +Package: refcount 2019/12/15 v3.6 Data extraction from label references (HO) +) +(/usr/share/texlive/texmf-dist/tex/generic/gettitlestring/gettitlestring.sty +Package: gettitlestring 2019/12/15 v1.6 Cleanup title references (HO) +) +\c@section@level=\count312 +) +\@linkdim=\dimen290 +\Hy@linkcounter=\count313 +\Hy@pagecounter=\count314 (/usr/share/texlive/texmf-dist/tex/latex/hyperref/pd1enc.def -File: pd1enc.def 2021-06-07 v7.00m Hyperref: PDFDocEncoding definition (HO) +File: pd1enc.def 2024-01-20 v7.01h Hyperref: PDFDocEncoding definition (HO) Now handling font encoding PD1 ... ... no UTF-8 mapping file for font encoding PD1 ) -(/usr/share/texlive/texmf-dist/tex/latex/hyperref/hyperref-langpatches.def -File: hyperref-langpatches.def 2021-06-07 v7.00m Hyperref: patches for babel la -nguages -) (/usr/share/texlive/texmf-dist/tex/generic/intcalc/intcalc.sty Package: intcalc 2019/12/15 v1.3 Expandable calculations with integers (HO) ) -(/usr/share/texlive/texmf-dist/tex/generic/etexcmds/etexcmds.sty -Package: etexcmds 2019/12/15 v1.7 Avoid name clashes with e-TeX commands (HO) -) -\Hy@SavedSpaceFactor=\count310 +\Hy@SavedSpaceFactor=\count315 (/usr/share/texlive/texmf-dist/tex/latex/hyperref/puenc.def -File: puenc.def 2021-06-07 v7.00m Hyperref: PDF Unicode definition (HO) +File: puenc.def 2024-01-20 v7.01h Hyperref: PDF Unicode definition (HO) Now handling font encoding PU ... ... no UTF-8 mapping file for font encoding PU ) -Package hyperref Info: Option `unicode' set `true' on input line 4073. -Package hyperref Info: Option `colorlinks' set `true' on input line 4073. -Package hyperref Info: Option `breaklinks' set `true' on input line 4073. -Package hyperref Info: Hyper figures OFF on input line 4192. -Package hyperref Info: Link nesting OFF on input line 4197. -Package hyperref Info: Hyper index ON on input line 4200. -Package hyperref Info: Plain pages OFF on input line 4207. -Package hyperref Info: Backreferencing OFF on input line 4212. +Package hyperref Info: Option `unicode' set `true' on input line 4062. +Package hyperref Info: Option `colorlinks' set `true' on input line 4062. +Package hyperref Info: Option `breaklinks' set `true' on input line 4062. +Package hyperref Info: Hyper figures OFF on input line 4179. +Package hyperref Info: Link nesting OFF on input line 4184. +Package hyperref Info: Hyper index ON on input line 4187. +Package hyperref Info: Plain pages OFF on input line 4194. +Package hyperref Info: Backreferencing OFF on input line 4199. Package hyperref Info: Implicit mode ON; LaTeX internals redefined. -Package hyperref Info: Bookmarks ON on input line 4445. -\c@Hy@tempcnt=\count311 +Package hyperref Info: Bookmarks ON on input line 4446. +\c@Hy@tempcnt=\count316 (/usr/share/texlive/texmf-dist/tex/latex/url/url.sty \Urlmuskip=\muskip17 Package: url 2013/09/16 ver 3.4 Verb mode for urls, etc. ) -LaTeX Info: Redefining \url on input line 4804. -\XeTeXLinkMargin=\dimen290 +LaTeX Info: Redefining \url on input line 4784. +\XeTeXLinkMargin=\dimen291 (/usr/share/texlive/texmf-dist/tex/generic/bitset/bitset.sty Package: bitset 2019/12/09 v1.3 Handle bit-vector datatype (HO) @@ -654,54 +671,55 @@ Package: bitset 2019/12/09 v1.3 Handle bit-vector datatype (HO) Package: bigintcalc 2019/12/15 v1.5 Expandable calculations on big integers (HO ) )) -\Fld@menulength=\count312 -\Field@Width=\dimen291 -\Fld@charsize=\dimen292 -Package hyperref Info: Hyper figures OFF on input line 6076. -Package hyperref Info: Link nesting OFF on input line 6081. -Package hyperref Info: Hyper index ON on input line 6084. -Package hyperref Info: backreferencing OFF on input line 6091. -Package hyperref Info: Link coloring ON on input line 6094. -Package hyperref Info: Link coloring with OCG OFF on input line 6101. -Package hyperref Info: PDF/A mode OFF on input line 6106. -LaTeX Info: Redefining \ref on input line 6146. -LaTeX Info: Redefining \pageref on input line 6150. +\Fld@menulength=\count317 +\Field@Width=\dimen292 +\Fld@charsize=\dimen293 +Package hyperref Info: Hyper figures OFF on input line 6063. +Package hyperref Info: Link nesting OFF on input line 6068. +Package hyperref Info: Hyper index ON on input line 6071. +Package hyperref Info: backreferencing OFF on input line 6078. +Package hyperref Info: Link coloring ON on input line 6081. +Package hyperref Info: Link coloring with OCG OFF on input line 6088. +Package hyperref Info: PDF/A mode OFF on input line 6093. (/usr/share/texlive/texmf-dist/tex/latex/base/atbegshi-ltx.sty Package: atbegshi-ltx 2021/01/10 v1.0c Emulation of the original atbegshi package with kernel methods ) -\Hy@abspage=\count313 -\c@Item=\count314 -\c@Hfootnote=\count315 +\Hy@abspage=\count318 +\c@Item=\count319 +\c@Hfootnote=\count320 ) Package hyperref Info: Driver (autodetected): hpdftex. (/usr/share/texlive/texmf-dist/tex/latex/hyperref/hpdftex.def -File: hpdftex.def 2021-06-07 v7.00m Hyperref driver for pdfTeX +File: hpdftex.def 2024-01-20 v7.01h Hyperref driver for pdfTeX (/usr/share/texlive/texmf-dist/tex/latex/base/atveryend-ltx.sty Package: atveryend-ltx 2020/08/19 v1.0a Emulation of the original atveryend pac kage with kernel methods ) -\Fld@listcount=\count316 -\c@bookmark@seq@number=\count317 +\Fld@listcount=\count321 +\c@bookmark@seq@number=\count322 (/usr/share/texlive/texmf-dist/tex/latex/rerunfilecheck/rerunfilecheck.sty -Package: rerunfilecheck 2019/12/05 v1.9 Rerun checks for auxiliary files (HO) +Package: rerunfilecheck 2022-07-10 v1.10 Rerun checks for auxiliary files (HO) (/usr/share/texlive/texmf-dist/tex/generic/uniquecounter/uniquecounter.sty Package: uniquecounter 2019/12/15 v1.4 Provide unlimited unique counter (HO) ) Package uniquecounter Info: New unique counter `rerunfilecheck' on input line 2 -86. +85. ) -\Hy@SectionHShift=\skip85 +\Hy@SectionHShift=\skip86 ) (/usr/share/texlive/texmf-dist/tex/latex/oberdiek/hypcap.sty Package: hypcap 2016/05/16 v1.12 Adjusting the anchors of captions (HO) -) + +(/usr/share/texlive/texmf-dist/tex/latex/letltxmacro/letltxmacro.sty +Package: letltxmacro 2019/12/03 v1.6 Let assignment for LaTeX macros (HO) +)) (./sphinxmessages.sty Package: sphinxmessages 2019/01/04 v2.0 Localized LaTeX macros (Sphinx team) ) @@ -716,9 +734,9 @@ LaTeX Font Info: Trying to load font information for T1+qtm on input line 73 File: t1qtm.fd 2009/09/25 v1.2 font definition file for T1/qtm ) (/usr/share/texlive/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def -File: l3backend-pdftex.def 2022-01-12 L3 backend support: PDF output (pdfTeX) -\l__color_backend_stack_int=\count318 -\l__pdf_internal_box=\box118 +File: l3backend-pdftex.def 2024-01-04 L3 backend support: PDF output (pdfTeX) +\l__color_backend_stack_int=\count323 +\l__pdf_internal_box=\box120 ) (./DFOLS.aux) \openout1 = `DFOLS.aux'. @@ -744,17 +762,17 @@ LaTeX Font Info: ... okay on input line 73. (/usr/share/texlive/texmf-dist/tex/context/base/mkii/supp-pdf.mkii [Loading MPS to PDF converter (version 2006.09.02).] -\scratchcounter=\count319 -\scratchdimen=\dimen293 -\scratchbox=\box119 -\nofMPsegments=\count320 -\nofMParguments=\count321 -\everyMPshowfont=\toks35 -\MPscratchCnt=\count322 -\MPscratchDim=\dimen294 -\MPnumerator=\count323 -\makeMPintoPDFobject=\count324 -\everyMPtoPDFconversion=\toks36 +\scratchcounter=\count324 +\scratchdimen=\dimen294 +\scratchbox=\box121 +\nofMPsegments=\count325 +\nofMParguments=\count326 +\everyMPshowfont=\toks36 +\MPscratchCnt=\count327 +\MPscratchDim=\dimen295 +\MPnumerator=\count328 +\makeMPintoPDFobject=\count329 +\everyMPtoPDFconversion=\toks37 ) (/usr/share/texlive/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty Package: epstopdf-base 2020-01-24 v2.11 Base part for package epstopdf Package epstopdf-base Info: Redefining graphics rule for `.eps' on input line 4 @@ -764,7 +782,26 @@ Package epstopdf-base Info: Redefining graphics rule for `.eps' on input line 4 File: epstopdf-sys.cfg 2010/07/13 v1.3 Configuration of (r)epstopdf for TeX Liv e )) -\c@literalblock=\count325 +(/usr/share/texlive/texmf-dist/tex/latex/fontawesome5/fontawesome5.sty +(/usr/share/texlive/texmf-dist/tex/latex/l3kernel/expl3.sty +Package: expl3 2024-01-22 L3 programming layer (loader) +) +Package: fontawesome5 2022/05/02 v5.15.4 Font Awesome 5 + +(/usr/share/texlive/texmf-dist/tex/latex/l3packages/l3keys2e/l3keys2e.sty +Package: l3keys2e 2023-10-10 LaTeX2e option processing using LaTeX3 keys +) +(/usr/share/texlive/texmf-dist/tex/latex/l3packages/xparse/xparse.sty +Package: xparse 2023-10-10 L3 Experimental document command parser +) +(/usr/share/texlive/texmf-dist/tex/latex/fontawesome5/fontawesome5-generic-help +er.sty +Package: fontawesome5-generic-helper 2022/05/02 v5.15.4 non-uTeX helper for fon +tawesome5 + +(/usr/share/texlive/texmf-dist/tex/latex/fontawesome5/fontawesome5-mapping.def) +)) +\c@literalblock=\count330 *geometry* driver: auto-detecting *geometry* detected driver: pdftex @@ -801,21 +838,6 @@ e * (1in=72.27pt=25.4mm, 1cm=28.453pt) Package hyperref Info: Link coloring ON on input line 73. -(/usr/share/texlive/texmf-dist/tex/latex/hyperref/nameref.sty -Package: nameref 2021-04-02 v2.47 Cross-referencing by name of section - -(/usr/share/texlive/texmf-dist/tex/latex/refcount/refcount.sty -Package: refcount 2019/12/15 v3.6 Data extraction from label references (HO) -) -(/usr/share/texlive/texmf-dist/tex/generic/gettitlestring/gettitlestring.sty -Package: gettitlestring 2019/12/15 v1.6 Cleanup title references (HO) -) -\c@section@level=\count326 -) -LaTeX Info: Redefining \ref on input line 73. -LaTeX Info: Redefining \pageref on input line 73. -LaTeX Info: Redefining \nameref on input line 73. - (./DFOLS.out) (./DFOLS.out) \@outlinefile=\write5 \openout5 = `DFOLS.out'. @@ -839,7 +861,8 @@ LaTeX Font Info: Trying to load font information for U+msb on input line 81. File: umsb.fd 2013/01/14 v3.01 AMS symbols B ) [1 -{/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map}] [2 +{/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map}{/usr/share/texmf/fonts/enc/ +dvips/tex-gyre/q-ec.enc}] [2 ] (./DFOLS.toc [1 @@ -864,7 +887,7 @@ LaTeX Font Info: Trying to load font information for T1+txtt on input line 1 (/usr/share/texlive/texmf-dist/tex/latex/txfonts/t1txtt.fd File: t1txtt.fd 2000/12/15 v3.1 -) [3] [4] +) [3{/usr/share/texmf/fonts/enc/dvips/tex-gyre/q-ts1.enc}] [4] Chapter 2. [5 @@ -874,103 +897,110 @@ Chapter 2. Chapter 3. [9] LaTeX Font Info: Font shape `T1/txtt/b/n' in size <10> not available -(Font) Font shape `T1/txtt/bx/n' tried instead on input line 548. +(Font) Font shape `T1/txtt/bx/n' tried instead on input line 554. [10] LaTeX Font Info: Font shape `T1/txtt/m/it' in size <10> not available -(Font) Font shape `T1/txtt/m/sl' tried instead on input line 560. +(Font) Font shape `T1/txtt/m/sl' tried instead on input line 566. LaTeX Font Info: Trying to load font information for TS1+txtt on input line -561. +567. (/usr/share/texlive/texmf-dist/tex/latex/txfonts/ts1txtt.fd File: ts1txtt.fd 2000/12/15 v3.1 ) [11] -Underfull \hbox (badness 7704) in paragraph at lines 642--644 +Underfull \hbox (badness 7704) in paragraph at lines 648--650 []\T1/txtt/m/n/10 rhobeg \T1/qtm/m/n/10 - the ini-tial value of the trust re-gi on ra-dius (de-fault is $\OT1/cmr/m/n/10 0\OML/cmm/m/it/10 :\OT1/cmr/m/n/10 1 [ ](\OMS/cmsy/m/n/10 k\OML/cmm/m/it/10 x[]\OMS/cmsy/m/n/10 k[]\OML/cmm/m/it/10 ; \OT1/cmr/m/n/10 1)$\T1/qtm/m/n/10 , or 0.1 if [] -[12] [13] [14] +[12] +Overfull \vbox (1.55939pt too high) detected at line 784 + [] + +[13] [14] LaTeX Font Info: Font shape `TS1/txtt/m/it' in size <10> not available -(Font) Font shape `TS1/txtt/m/sl' tried instead on input line 920. +(Font) Font shape `TS1/txtt/m/sl' tried instead on input line 926. - [15] [16] [17] -Overfull \vbox (3.3114pt too high) detected at line 1100 + [15] [16{/usr/share/texlive/texmf-dist/fonts/enc/dvips/base/8r.enc}] +[17] [18] [19] [20] +Overfull \vbox (3.3114pt too high) detected at line 1287 [] -[18] [19] [20] - +[21] [22] [23] + File: data_fitting.png Graphic file (type png) -Package pdftex.def Info: data_fitting.png used on input line 1246. +Package pdftex.def Info: data_fitting.png used on input line 1433. (pdftex.def) Requested size: 352.31625pt x 270.79639pt. - [21 <./data_fitting.png>] [22] [23] [24 - -] + [24 <./data_fitting.png>] [25] [26] Chapter 4. -[25] [26] -Underfull \hbox (badness 6725) in paragraph at lines 1516--1518 +[27 + +] [28] +Underfull \hbox (badness 6725) in paragraph at lines 1703--1705 []\T1/txtt/m/n/10 regression.increase_num_extra_steps_with_restart \T1/qtm/m/n/ 10 - The amount to in-crease \T1/txtt/m/n/10 regression. [] -[27] [28] [29] [30] -Chapter 5. -[31 +[29] [30] [31] [32 -] [32] +] +Chapter 5. +[33] [34] Chapter 6. -[33 +[35 -] [34] [35] [36 +] [36] [37] [38 ] Chapter 7. -[37] [38 +[39] [40 ] Chapter 8. -[39] [40 +[41] [42 -] (./DFOLS.ind) [41 +] (./DFOLS.ind) [43 ] (./DFOLS.aux) + *********** +LaTeX2e <2023-11-01> patch level 1 +L3 programming layer <2024-01-22> + *********** Package rerunfilecheck Info: File `DFOLS.out' has not changed. -(rerunfilecheck) Checksum: B1D090D924F9CAE29B25AFECFC8CF68A;12063. +(rerunfilecheck) Checksum: B8D2C0D2FC673CBE8A323F2B3C55D7BA;12492. ) Here is how much of TeX's memory you used: - 16273 strings out of 480247 - 271557 string characters out of 5896151 - 632502 words of memory out of 5000000 - 33688 multiletter control sequences out of 15000+600000 - 526530 words of font info for 75 fonts, out of 8000000 for 9000 + 20160 strings out of 476182 + 357968 string characters out of 5795595 + 1997975 words of memory out of 5000000 + 41617 multiletter control sequences out of 15000+600000 + 615340 words of font info for 83 fonts, out of 8000000 for 9000 15 hyphenation exceptions out of 8191 - 70i,20n,76p,887b,609s stack positions out of 5000i,500n,10000p,200000b,80000s -{/usr/share/texlive/texmf-dist/fonts/enc/dvips/base/8r.enc}{/usr/share/texmf/ -fonts/enc/dvips/tex-gyre/q-ts1.enc}{/usr/share/texmf/fonts/enc/dvips/tex-gyre/q --ec.enc}< -/usr/share/texmf/fonts/type1/public/tex-gyre/qtmri.pfb> -Output written on DFOLS.pdf (45 pages, 387990 bytes). + 72i,20n,83p,1194b,719s stack positions out of 10000i,1000n,20000p,200000b,200000s + +Output written on DFOLS.pdf (47 pages, 397982 bytes). PDF statistics: - 791 PDF objects out of 1000 (max. 8388607) - 701 compressed objects within 8 object streams - 132 named destinations out of 1000 (max. 500000) - 586 words of extra memory for PDF output out of 10000 (max. 10000000) + 814 PDF objects out of 1000 (max. 8388607) + 722 compressed objects within 8 object streams + 137 named destinations out of 1000 (max. 500000) + 602 words of extra memory for PDF output out of 10000 (max. 10000000) diff --git a/docs/build/latex/DFOLS.out b/docs/build/latex/DFOLS.out index 3c92392..74774ac 100755 --- a/docs/build/latex/DFOLS.out +++ b/docs/build/latex/DFOLS.out @@ -19,52 +19,54 @@ \BOOKMARK [1][-]{section.3.5}{\376\377\000A\000d\000d\000i\000n\000g\000\040\000B\000o\000u\000n\000d\000s\000\040\000a\000n\000d\000\040\000M\000o\000r\000e\000\040\000O\000u\000t\000p\000u\000t}{chapter.3}% 19 \BOOKMARK [1][-]{section.3.6}{\376\377\000A\000d\000d\000i\000n\000g\000\040\000G\000e\000n\000e\000r\000a\000l\000\040\000C\000o\000n\000v\000e\000x\000\040\000C\000o\000n\000s\000t\000r\000a\000i\000n\000t\000s}{chapter.3}% 20 \BOOKMARK [1][-]{section.3.7}{\376\377\000A\000d\000d\000i\000n\000g\000\040\000a\000\040\000R\000e\000g\000u\000l\000a\000r\000i\000z\000e\000r}{chapter.3}% 21 -\BOOKMARK [1][-]{section.3.8}{\376\377\000E\000x\000a\000m\000p\000l\000e\000:\000\040\000N\000o\000i\000s\000y\000\040\000O\000b\000j\000e\000c\000t\000i\000v\000e\000\040\000E\000v\000a\000l\000u\000a\000t\000i\000o\000n}{chapter.3}% 22 -\BOOKMARK [1][-]{section.3.9}{\376\377\000E\000x\000a\000m\000p\000l\000e\000:\000\040\000P\000a\000r\000a\000m\000e\000t\000e\000r\000\040\000E\000s\000t\000i\000m\000a\000t\000i\000o\000n\000/\000D\000a\000t\000a\000\040\000F\000i\000t\000t\000i\000n\000g}{chapter.3}% 23 -\BOOKMARK [1][-]{section.3.10}{\376\377\000E\000x\000a\000m\000p\000l\000e\000:\000\040\000S\000o\000l\000v\000i\000n\000g\000\040\000a\000\040\000N\000o\000n\000l\000i\000n\000e\000a\000r\000\040\000S\000y\000s\000t\000e\000m\000\040\000o\000f\000\040\000E\000q\000u\000a\000t\000i\000o\000n\000s}{chapter.3}% 24 -\BOOKMARK [1][-]{section.3.11}{\376\377\000R\000e\000f\000e\000r\000e\000n\000c\000e\000s}{chapter.3}% 25 -\BOOKMARK [0][-]{chapter.4}{\376\377\000A\000d\000v\000a\000n\000c\000e\000d\000\040\000U\000s\000a\000g\000e}{}% 26 -\BOOKMARK [1][-]{section.4.1}{\376\377\000G\000e\000n\000e\000r\000a\000l\000\040\000A\000l\000g\000o\000r\000i\000t\000h\000m\000\040\000P\000a\000r\000a\000m\000e\000t\000e\000r\000s}{chapter.4}% 27 -\BOOKMARK [1][-]{section.4.2}{\376\377\000L\000o\000g\000g\000i\000n\000g\000\040\000a\000n\000d\000\040\000O\000u\000t\000p\000u\000t}{chapter.4}% 28 -\BOOKMARK [1][-]{section.4.3}{\376\377\000I\000n\000i\000t\000i\000a\000l\000i\000z\000a\000t\000i\000o\000n\000\040\000o\000f\000\040\000P\000o\000i\000n\000t\000s}{chapter.4}% 29 -\BOOKMARK [1][-]{section.4.4}{\376\377\000T\000r\000u\000s\000t\000\040\000R\000e\000g\000i\000o\000n\000\040\000M\000a\000n\000a\000g\000e\000m\000e\000n\000t}{chapter.4}% 30 -\BOOKMARK [1][-]{section.4.5}{\376\377\000T\000e\000r\000m\000i\000n\000a\000t\000i\000o\000n\000\040\000o\000n\000\040\000S\000m\000a\000l\000l\000\040\000O\000b\000j\000e\000c\000t\000i\000v\000e\000\040\000V\000a\000l\000u\000e}{chapter.4}% 31 -\BOOKMARK [1][-]{section.4.6}{\376\377\000T\000e\000r\000m\000i\000n\000a\000t\000i\000o\000n\000\040\000o\000n\000\040\000S\000l\000o\000w\000\040\000P\000r\000o\000g\000r\000e\000s\000s}{chapter.4}% 32 -\BOOKMARK [1][-]{section.4.7}{\376\377\000S\000t\000o\000c\000h\000a\000s\000t\000i\000c\000\040\000N\000o\000i\000s\000e\000\040\000I\000n\000f\000o\000r\000m\000a\000t\000i\000o\000n}{chapter.4}% 33 -\BOOKMARK [1][-]{section.4.8}{\376\377\000I\000n\000t\000e\000r\000p\000o\000l\000a\000t\000i\000o\000n\000\040\000M\000a\000n\000a\000g\000e\000m\000e\000n\000t}{chapter.4}% 34 -\BOOKMARK [1][-]{section.4.9}{\376\377\000R\000e\000g\000r\000e\000s\000s\000i\000o\000n\000\040\000M\000o\000d\000e\000l\000\040\000M\000a\000n\000a\000g\000e\000m\000e\000n\000t}{chapter.4}% 35 -\BOOKMARK [1][-]{section.4.10}{\376\377\000M\000u\000l\000t\000i\000p\000l\000e\000\040\000R\000e\000s\000t\000a\000r\000t\000s}{chapter.4}% 36 -\BOOKMARK [1][-]{section.4.11}{\376\377\000D\000y\000n\000a\000m\000i\000c\000a\000l\000l\000y\000\040\000G\000r\000o\000w\000i\000n\000g\000\040\000I\000n\000i\000t\000i\000a\000l\000\040\000S\000e\000t}{chapter.4}% 37 -\BOOKMARK [1][-]{section.4.12}{\376\377\000D\000y\000k\000s\000t\000r\000a\040\031\000s\000\040\000A\000l\000g\000o\000r\000i\000t\000h\000m}{chapter.4}% 38 -\BOOKMARK [1][-]{section.4.13}{\376\377\000C\000h\000e\000c\000k\000i\000n\000g\000\040\000M\000a\000t\000r\000i\000x\000\040\000R\000a\000n\000k}{chapter.4}% 39 -\BOOKMARK [1][-]{section.4.14}{\376\377\000H\000a\000n\000d\000l\000i\000n\000g\000\040\000r\000e\000g\000u\000l\000a\000r\000i\000z\000e\000r}{chapter.4}% 40 -\BOOKMARK [1][-]{section.4.15}{\376\377\000R\000e\000f\000e\000r\000e\000n\000c\000e\000s}{chapter.4}% 41 -\BOOKMARK [0][-]{chapter.5}{\376\377\000D\000i\000a\000g\000n\000o\000s\000t\000i\000c\000\040\000I\000n\000f\000o\000r\000m\000a\000t\000i\000o\000n}{}% 42 -\BOOKMARK [1][-]{section.5.1}{\376\377\000C\000u\000r\000r\000e\000n\000t\000\040\000I\000t\000e\000r\000a\000t\000e}{chapter.5}% 43 -\BOOKMARK [1][-]{section.5.2}{\376\377\000T\000r\000u\000s\000t\000\040\000R\000e\000g\000i\000o\000n}{chapter.5}% 44 -\BOOKMARK [1][-]{section.5.3}{\376\377\000M\000o\000d\000e\000l\000\040\000I\000n\000t\000e\000r\000p\000o\000l\000a\000t\000i\000o\000n}{chapter.5}% 45 -\BOOKMARK [1][-]{section.5.4}{\376\377\000I\000t\000e\000r\000a\000t\000i\000o\000n\000\040\000C\000o\000u\000n\000t}{chapter.5}% 46 -\BOOKMARK [1][-]{section.5.5}{\376\377\000A\000l\000g\000o\000r\000i\000t\000h\000m\000\040\000P\000r\000o\000g\000r\000e\000s\000s}{chapter.5}% 47 -\BOOKMARK [0][-]{chapter.6}{\376\377\000V\000e\000r\000s\000i\000o\000n\000\040\000H\000i\000s\000t\000o\000r\000y}{}% 48 -\BOOKMARK [1][-]{section.6.1}{\376\377\000V\000e\000r\000s\000i\000o\000n\000\040\0001\000.\0000\000\040\000\050\0006\000\040\000F\000e\000b\000\040\0002\0000\0001\0008\000\051}{chapter.6}% 49 -\BOOKMARK [1][-]{section.6.2}{\376\377\000V\000e\000r\000s\000i\000o\000n\000\040\0001\000.\0000\000.\0001\000\040\000\050\0002\0000\000\040\000F\000e\000b\000\040\0002\0000\0001\0008\000\051}{chapter.6}% 50 -\BOOKMARK [1][-]{section.6.3}{\376\377\000V\000e\000r\000s\000i\000o\000n\000\040\0001\000.\0000\000.\0002\000\040\000\050\0002\0000\000\040\000J\000u\000n\000\040\0002\0000\0001\0008\000\051}{chapter.6}% 51 -\BOOKMARK [1][-]{section.6.4}{\376\377\000V\000e\000r\000s\000i\000o\000n\000\040\0001\000.\0001\000\040\000\050\0001\0006\000\040\000J\000a\000n\000\040\0002\0000\0001\0009\000\051}{chapter.6}% 52 -\BOOKMARK [1][-]{section.6.5}{\376\377\000V\000e\000r\000s\000i\000o\000n\000\040\0001\000.\0001\000.\0001\000\040\000\050\0005\000\040\000A\000p\000r\000\040\0002\0000\0001\0009\000\051}{chapter.6}% 53 -\BOOKMARK [1][-]{section.6.6}{\376\377\000V\000e\000r\000s\000i\000o\000n\000\040\0001\000.\0002\000\040\000\050\0001\0002\000\040\000F\000e\000b\000\040\0002\0000\0002\0000\000\051}{chapter.6}% 54 -\BOOKMARK [1][-]{section.6.7}{\376\377\000V\000e\000r\000s\000i\000o\000n\000\040\0001\000.\0002\000.\0001\000\040\000\050\0001\0003\000\040\000F\000e\000b\000\040\0002\0000\0002\0000\000\051}{chapter.6}% 55 -\BOOKMARK [1][-]{section.6.8}{\376\377\000V\000e\000r\000s\000i\000o\000n\000\040\0001\000.\0002\000.\0002\000\040\000\050\0002\0006\000\040\000F\000e\000b\000\040\0002\0000\0002\0001\000\051}{chapter.6}% 56 -\BOOKMARK [1][-]{section.6.9}{\376\377\000V\000e\000r\000s\000i\000o\000n\000\040\0001\000.\0002\000.\0003\000\040\000\050\0001\000\040\000J\000u\000n\000\040\0002\0000\0002\0001\000\051}{chapter.6}% 57 -\BOOKMARK [1][-]{section.6.10}{\376\377\000V\000e\000r\000s\000i\000o\000n\000\040\0001\000.\0003\000.\0000\000\040\000\050\0008\000\040\000N\000o\000v\000\040\0002\0000\0002\0001\000\051}{chapter.6}% 58 -\BOOKMARK [1][-]{section.6.11}{\376\377\000V\000e\000r\000s\000i\000o\000n\000\040\0001\000.\0004\000.\0000\000\040\000\050\0002\0009\000\040\000J\000a\000n\000\040\0002\0000\0002\0004\000\051}{chapter.6}% 59 -\BOOKMARK [1][-]{section.6.12}{\376\377\000V\000e\000r\000s\000i\000o\000n\000\040\0001\000.\0004\000.\0001\000\040\000\050\0001\0001\000\040\000A\000p\000r\000\040\0002\0000\0002\0004\000\051}{chapter.6}% 60 -\BOOKMARK [1][-]{section.6.13}{\376\377\000V\000e\000r\000s\000i\000o\000n\000\040\0001\000.\0005\000.\0000\000\040\000\050\0001\0001\000\040\000S\000e\000p\000\040\0002\0000\0002\0004\000\051}{chapter.6}% 61 -\BOOKMARK [1][-]{section.6.14}{\376\377\000V\000e\000r\000s\000i\000o\000n\000\040\0001\000.\0005\000.\0001\000\040\000\050\0001\0000\000\040\000O\000c\000t\000\040\0002\0000\0002\0004\000\051}{chapter.6}% 62 -\BOOKMARK [1][-]{section.6.15}{\376\377\000V\000e\000r\000s\000i\000o\000n\000\040\0001\000.\0005\000.\0002\000\040\000\050\0002\0008\000\040\000O\000c\000t\000\040\0002\0000\0002\0004\000\051}{chapter.6}% 63 -\BOOKMARK [1][-]{section.6.16}{\376\377\000V\000e\000r\000s\000i\000o\000n\000\040\0001\000.\0005\000.\0003\000\040\000\050\0003\0000\000\040\000O\000c\000t\000\040\0002\0000\0002\0004\000\051}{chapter.6}% 64 -\BOOKMARK [1][-]{section.6.17}{\376\377\000V\000e\000r\000s\000i\000o\000n\000\040\0001\000.\0005\000.\0004\000\040\000\050\0001\0001\000\040\000F\000e\000b\000\040\0002\0000\0002\0005\000\051}{chapter.6}% 65 -\BOOKMARK [0][-]{chapter.7}{\376\377\000C\000o\000n\000t\000r\000i\000b\000u\000t\000o\000r\000s}{}% 66 -\BOOKMARK [1][-]{section.7.1}{\376\377\000M\000a\000i\000n\000\040\000a\000u\000t\000h\000o\000r}{chapter.7}% 67 -\BOOKMARK [1][-]{section.7.2}{\376\377\000C\000o\000n\000t\000r\000i\000b\000u\000t\000o\000r\000s}{chapter.7}% 68 -\BOOKMARK [0][-]{chapter.8}{\376\377\000A\000c\000k\000n\000o\000w\000l\000e\000d\000g\000e\000m\000e\000n\000t\000s}{}% 69 -\BOOKMARK [0][-]{chapter*.3}{\376\377\000B\000i\000b\000l\000i\000o\000g\000r\000a\000p\000h\000y}{}% 70 +\BOOKMARK [1][-]{section.3.8}{\376\377\000U\000s\000i\000n\000g\000\040\000I\000n\000i\000t\000i\000a\000l\000\040\000E\000v\000a\000l\000u\000a\000t\000i\000o\000n\000\040\000D\000a\000t\000a\000b\000a\000s\000e}{chapter.3}% 22 +\BOOKMARK [1][-]{section.3.9}{\376\377\000E\000x\000a\000m\000p\000l\000e\000:\000\040\000N\000o\000i\000s\000y\000\040\000O\000b\000j\000e\000c\000t\000i\000v\000e\000\040\000E\000v\000a\000l\000u\000a\000t\000i\000o\000n}{chapter.3}% 23 +\BOOKMARK [1][-]{section.3.10}{\376\377\000E\000x\000a\000m\000p\000l\000e\000:\000\040\000P\000a\000r\000a\000m\000e\000t\000e\000r\000\040\000E\000s\000t\000i\000m\000a\000t\000i\000o\000n\000/\000D\000a\000t\000a\000\040\000F\000i\000t\000t\000i\000n\000g}{chapter.3}% 24 +\BOOKMARK [1][-]{section.3.11}{\376\377\000E\000x\000a\000m\000p\000l\000e\000:\000\040\000S\000o\000l\000v\000i\000n\000g\000\040\000a\000\040\000N\000o\000n\000l\000i\000n\000e\000a\000r\000\040\000S\000y\000s\000t\000e\000m\000\040\000o\000f\000\040\000E\000q\000u\000a\000t\000i\000o\000n\000s}{chapter.3}% 25 +\BOOKMARK [1][-]{section.3.12}{\376\377\000R\000e\000f\000e\000r\000e\000n\000c\000e\000s}{chapter.3}% 26 +\BOOKMARK [0][-]{chapter.4}{\376\377\000A\000d\000v\000a\000n\000c\000e\000d\000\040\000U\000s\000a\000g\000e}{}% 27 +\BOOKMARK [1][-]{section.4.1}{\376\377\000G\000e\000n\000e\000r\000a\000l\000\040\000A\000l\000g\000o\000r\000i\000t\000h\000m\000\040\000P\000a\000r\000a\000m\000e\000t\000e\000r\000s}{chapter.4}% 28 +\BOOKMARK [1][-]{section.4.2}{\376\377\000L\000o\000g\000g\000i\000n\000g\000\040\000a\000n\000d\000\040\000O\000u\000t\000p\000u\000t}{chapter.4}% 29 +\BOOKMARK [1][-]{section.4.3}{\376\377\000I\000n\000i\000t\000i\000a\000l\000i\000z\000a\000t\000i\000o\000n\000\040\000o\000f\000\040\000P\000o\000i\000n\000t\000s}{chapter.4}% 30 +\BOOKMARK [1][-]{section.4.4}{\376\377\000T\000r\000u\000s\000t\000\040\000R\000e\000g\000i\000o\000n\000\040\000M\000a\000n\000a\000g\000e\000m\000e\000n\000t}{chapter.4}% 31 +\BOOKMARK [1][-]{section.4.5}{\376\377\000T\000e\000r\000m\000i\000n\000a\000t\000i\000o\000n\000\040\000o\000n\000\040\000S\000m\000a\000l\000l\000\040\000O\000b\000j\000e\000c\000t\000i\000v\000e\000\040\000V\000a\000l\000u\000e}{chapter.4}% 32 +\BOOKMARK [1][-]{section.4.6}{\376\377\000T\000e\000r\000m\000i\000n\000a\000t\000i\000o\000n\000\040\000o\000n\000\040\000S\000l\000o\000w\000\040\000P\000r\000o\000g\000r\000e\000s\000s}{chapter.4}% 33 +\BOOKMARK [1][-]{section.4.7}{\376\377\000S\000t\000o\000c\000h\000a\000s\000t\000i\000c\000\040\000N\000o\000i\000s\000e\000\040\000I\000n\000f\000o\000r\000m\000a\000t\000i\000o\000n}{chapter.4}% 34 +\BOOKMARK [1][-]{section.4.8}{\376\377\000I\000n\000t\000e\000r\000p\000o\000l\000a\000t\000i\000o\000n\000\040\000M\000a\000n\000a\000g\000e\000m\000e\000n\000t}{chapter.4}% 35 +\BOOKMARK [1][-]{section.4.9}{\376\377\000R\000e\000g\000r\000e\000s\000s\000i\000o\000n\000\040\000M\000o\000d\000e\000l\000\040\000M\000a\000n\000a\000g\000e\000m\000e\000n\000t}{chapter.4}% 36 +\BOOKMARK [1][-]{section.4.10}{\376\377\000M\000u\000l\000t\000i\000p\000l\000e\000\040\000R\000e\000s\000t\000a\000r\000t\000s}{chapter.4}% 37 +\BOOKMARK [1][-]{section.4.11}{\376\377\000D\000y\000n\000a\000m\000i\000c\000a\000l\000l\000y\000\040\000G\000r\000o\000w\000i\000n\000g\000\040\000I\000n\000i\000t\000i\000a\000l\000\040\000S\000e\000t}{chapter.4}% 38 +\BOOKMARK [1][-]{section.4.12}{\376\377\000D\000y\000k\000s\000t\000r\000a\040\031\000s\000\040\000A\000l\000g\000o\000r\000i\000t\000h\000m}{chapter.4}% 39 +\BOOKMARK [1][-]{section.4.13}{\376\377\000C\000h\000e\000c\000k\000i\000n\000g\000\040\000M\000a\000t\000r\000i\000x\000\040\000R\000a\000n\000k}{chapter.4}% 40 +\BOOKMARK [1][-]{section.4.14}{\376\377\000H\000a\000n\000d\000l\000i\000n\000g\000\040\000r\000e\000g\000u\000l\000a\000r\000i\000z\000e\000r}{chapter.4}% 41 +\BOOKMARK [1][-]{section.4.15}{\376\377\000R\000e\000f\000e\000r\000e\000n\000c\000e\000s}{chapter.4}% 42 +\BOOKMARK [0][-]{chapter.5}{\376\377\000D\000i\000a\000g\000n\000o\000s\000t\000i\000c\000\040\000I\000n\000f\000o\000r\000m\000a\000t\000i\000o\000n}{}% 43 +\BOOKMARK [1][-]{section.5.1}{\376\377\000C\000u\000r\000r\000e\000n\000t\000\040\000I\000t\000e\000r\000a\000t\000e}{chapter.5}% 44 +\BOOKMARK [1][-]{section.5.2}{\376\377\000T\000r\000u\000s\000t\000\040\000R\000e\000g\000i\000o\000n}{chapter.5}% 45 +\BOOKMARK [1][-]{section.5.3}{\376\377\000M\000o\000d\000e\000l\000\040\000I\000n\000t\000e\000r\000p\000o\000l\000a\000t\000i\000o\000n}{chapter.5}% 46 +\BOOKMARK [1][-]{section.5.4}{\376\377\000I\000t\000e\000r\000a\000t\000i\000o\000n\000\040\000C\000o\000u\000n\000t}{chapter.5}% 47 +\BOOKMARK [1][-]{section.5.5}{\376\377\000A\000l\000g\000o\000r\000i\000t\000h\000m\000\040\000P\000r\000o\000g\000r\000e\000s\000s}{chapter.5}% 48 +\BOOKMARK [0][-]{chapter.6}{\376\377\000V\000e\000r\000s\000i\000o\000n\000\040\000H\000i\000s\000t\000o\000r\000y}{}% 49 +\BOOKMARK [1][-]{section.6.1}{\376\377\000V\000e\000r\000s\000i\000o\000n\000\040\0001\000.\0000\000\040\000\050\0006\000\040\000F\000e\000b\000\040\0002\0000\0001\0008\000\051}{chapter.6}% 50 +\BOOKMARK [1][-]{section.6.2}{\376\377\000V\000e\000r\000s\000i\000o\000n\000\040\0001\000.\0000\000.\0001\000\040\000\050\0002\0000\000\040\000F\000e\000b\000\040\0002\0000\0001\0008\000\051}{chapter.6}% 51 +\BOOKMARK [1][-]{section.6.3}{\376\377\000V\000e\000r\000s\000i\000o\000n\000\040\0001\000.\0000\000.\0002\000\040\000\050\0002\0000\000\040\000J\000u\000n\000\040\0002\0000\0001\0008\000\051}{chapter.6}% 52 +\BOOKMARK [1][-]{section.6.4}{\376\377\000V\000e\000r\000s\000i\000o\000n\000\040\0001\000.\0001\000\040\000\050\0001\0006\000\040\000J\000a\000n\000\040\0002\0000\0001\0009\000\051}{chapter.6}% 53 +\BOOKMARK [1][-]{section.6.5}{\376\377\000V\000e\000r\000s\000i\000o\000n\000\040\0001\000.\0001\000.\0001\000\040\000\050\0005\000\040\000A\000p\000r\000\040\0002\0000\0001\0009\000\051}{chapter.6}% 54 +\BOOKMARK [1][-]{section.6.6}{\376\377\000V\000e\000r\000s\000i\000o\000n\000\040\0001\000.\0002\000\040\000\050\0001\0002\000\040\000F\000e\000b\000\040\0002\0000\0002\0000\000\051}{chapter.6}% 55 +\BOOKMARK [1][-]{section.6.7}{\376\377\000V\000e\000r\000s\000i\000o\000n\000\040\0001\000.\0002\000.\0001\000\040\000\050\0001\0003\000\040\000F\000e\000b\000\040\0002\0000\0002\0000\000\051}{chapter.6}% 56 +\BOOKMARK [1][-]{section.6.8}{\376\377\000V\000e\000r\000s\000i\000o\000n\000\040\0001\000.\0002\000.\0002\000\040\000\050\0002\0006\000\040\000F\000e\000b\000\040\0002\0000\0002\0001\000\051}{chapter.6}% 57 +\BOOKMARK [1][-]{section.6.9}{\376\377\000V\000e\000r\000s\000i\000o\000n\000\040\0001\000.\0002\000.\0003\000\040\000\050\0001\000\040\000J\000u\000n\000\040\0002\0000\0002\0001\000\051}{chapter.6}% 58 +\BOOKMARK [1][-]{section.6.10}{\376\377\000V\000e\000r\000s\000i\000o\000n\000\040\0001\000.\0003\000.\0000\000\040\000\050\0008\000\040\000N\000o\000v\000\040\0002\0000\0002\0001\000\051}{chapter.6}% 59 +\BOOKMARK [1][-]{section.6.11}{\376\377\000V\000e\000r\000s\000i\000o\000n\000\040\0001\000.\0004\000.\0000\000\040\000\050\0002\0009\000\040\000J\000a\000n\000\040\0002\0000\0002\0004\000\051}{chapter.6}% 60 +\BOOKMARK [1][-]{section.6.12}{\376\377\000V\000e\000r\000s\000i\000o\000n\000\040\0001\000.\0004\000.\0001\000\040\000\050\0001\0001\000\040\000A\000p\000r\000\040\0002\0000\0002\0004\000\051}{chapter.6}% 61 +\BOOKMARK [1][-]{section.6.13}{\376\377\000V\000e\000r\000s\000i\000o\000n\000\040\0001\000.\0005\000.\0000\000\040\000\050\0001\0001\000\040\000S\000e\000p\000\040\0002\0000\0002\0004\000\051}{chapter.6}% 62 +\BOOKMARK [1][-]{section.6.14}{\376\377\000V\000e\000r\000s\000i\000o\000n\000\040\0001\000.\0005\000.\0001\000\040\000\050\0001\0000\000\040\000O\000c\000t\000\040\0002\0000\0002\0004\000\051}{chapter.6}% 63 +\BOOKMARK [1][-]{section.6.15}{\376\377\000V\000e\000r\000s\000i\000o\000n\000\040\0001\000.\0005\000.\0002\000\040\000\050\0002\0008\000\040\000O\000c\000t\000\040\0002\0000\0002\0004\000\051}{chapter.6}% 64 +\BOOKMARK [1][-]{section.6.16}{\376\377\000V\000e\000r\000s\000i\000o\000n\000\040\0001\000.\0005\000.\0003\000\040\000\050\0003\0000\000\040\000O\000c\000t\000\040\0002\0000\0002\0004\000\051}{chapter.6}% 65 +\BOOKMARK [1][-]{section.6.17}{\376\377\000V\000e\000r\000s\000i\000o\000n\000\040\0001\000.\0005\000.\0004\000\040\000\050\0001\0001\000\040\000F\000e\000b\000\040\0002\0000\0002\0005\000\051}{chapter.6}% 66 +\BOOKMARK [1][-]{section.6.18}{\376\377\000V\000e\000r\000s\000i\000o\000n\000\040\0001\000.\0006\000\040\000\050\0001\0000\000\040\000S\000e\000p\000\040\0002\0000\0002\0005\000\051}{chapter.6}% 67 +\BOOKMARK [0][-]{chapter.7}{\376\377\000C\000o\000n\000t\000r\000i\000b\000u\000t\000o\000r\000s}{}% 68 +\BOOKMARK [1][-]{section.7.1}{\376\377\000M\000a\000i\000n\000\040\000a\000u\000t\000h\000o\000r}{chapter.7}% 69 +\BOOKMARK [1][-]{section.7.2}{\376\377\000C\000o\000n\000t\000r\000i\000b\000u\000t\000o\000r\000s}{chapter.7}% 70 +\BOOKMARK [0][-]{chapter.8}{\376\377\000A\000c\000k\000n\000o\000w\000l\000e\000d\000g\000e\000m\000e\000n\000t\000s}{}% 71 +\BOOKMARK [0][-]{chapter*.3}{\376\377\000B\000i\000b\000l\000i\000o\000g\000r\000a\000p\000h\000y}{}% 72 diff --git a/docs/build/latex/DFOLS.pdf b/docs/build/latex/DFOLS.pdf index 1b0a0ba..89b3d4e 100644 Binary files a/docs/build/latex/DFOLS.pdf and b/docs/build/latex/DFOLS.pdf differ diff --git a/docs/build/latex/DFOLS.tex b/docs/build/latex/DFOLS.tex index f56541f..ba7fee3 100755 --- a/docs/build/latex/DFOLS.tex +++ b/docs/build/latex/DFOLS.tex @@ -64,8 +64,8 @@ \title{DFO-LS Documentation} -\date{11 February 2025} -\release{1.5.4} +\date{10 September 2025} +\release{1.6} \author{Lindon Roberts} \newcommand{\sphinxlogo}{\vbox{}} \renewcommand{\releasename}{Release} @@ -86,10 +86,10 @@ \sphinxAtStartPar -\sphinxstylestrong{Release:} 1.5.4 +\sphinxstylestrong{Release:} 1.6 \sphinxAtStartPar -\sphinxstylestrong{Date:} 11 February 2025 +\sphinxstylestrong{Date:} 10 September 2025 \sphinxAtStartPar \sphinxstylestrong{Author:} \sphinxhref{https://lindonroberts.github.io/}{Lindon Roberts} @@ -446,6 +446,12 @@ \section{How to use DFO\sphinxhyphen{}LS} The input \sphinxcode{\sphinxupquote{x0}} is the starting point for the solver, and (where possible) should be set to be the best available estimate of the true solution \(x_{min}\in\mathbb{R}^n\). It should be specified as a one\sphinxhyphen{}dimensional NumPy array (i.e. with \sphinxcode{\sphinxupquote{x0.shape == (n,)}}). As DFO\sphinxhyphen{}LS is a local solver, providing different values for \sphinxcode{\sphinxupquote{x0}} may cause it to return different solutions, with possibly different objective values. +\sphinxAtStartPar +In newer version of DFO\sphinxhyphen{}LS (v1.6 onwards), the input \sphinxcode{\sphinxupquote{x0}} may instead by an instance of a \sphinxcode{\sphinxupquote{dfols.EvaluationDatabase}}, which stores a collection +of previously evaluated points and their associated vectors of residuals. One of these points is designated the starting point for the solver, and the other +points may be used by DFO\sphinxhyphen{}LS to build its first approximation to \sphinxcode{\sphinxupquote{objfun}}, reducing the number of evaluations required to begin the main iteration. +See the example below for more details for how to use this functionality. + \sphinxAtStartPar The output of \sphinxcode{\sphinxupquote{dfols.solve}} is an object containing: \begin{itemize} @@ -556,7 +562,7 @@ \section{How to use DFO\sphinxhyphen{}LS} \begin{quote} \begin{sphinxVerbatim}[commandchars=\\\{\}] -\PYG{k+kn}{import} \PYG{n+nn}{json} +\PYG{k+kn}{import}\PYG{+w}{ }\PYG{n+nn}{json} \PYG{n}{soln\PYGZus{}dict} \PYG{o}{=} \PYG{n}{soln}\PYG{o}{.}\PYG{n}{to\PYGZus{}dict}\PYG{p}{(}\PYG{p}{)} \PYG{c+c1}{\PYGZsh{} convert soln to serializable dict object} \PYG{k}{with} \PYG{n+nb}{open}\PYG{p}{(}\PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{dfols\PYGZus{}results.json}\PYG{l+s+s2}{\PYGZdq{}}\PYG{p}{,} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{w}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} \PYG{k}{as} \PYG{n}{f}\PYG{p}{:} \PYG{n}{json}\PYG{o}{.}\PYG{n}{dump}\PYG{p}{(}\PYG{n}{soln\PYGZus{}dict}\PYG{p}{,} \PYG{n}{f}\PYG{p}{,} \PYG{n}{indent}\PYG{o}{=}\PYG{l+m+mi}{2}\PYG{p}{)} @@ -571,7 +577,7 @@ \section{How to use DFO\sphinxhyphen{}LS} \begin{quote} \begin{sphinxVerbatim}[commandchars=\\\{\}] -\PYG{k+kn}{import} \PYG{n+nn}{json} +\PYG{k+kn}{import}\PYG{+w}{ }\PYG{n+nn}{json} \PYG{n}{soln\PYGZus{}dict} \PYG{o}{=} \PYG{k+kc}{None} \PYG{k}{with} \PYG{n+nb}{open}\PYG{p}{(}\PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{dfols\PYGZus{}results.json}\PYG{l+s+s2}{\PYGZdq{}}\PYG{p}{)} \PYG{k}{as} \PYG{n}{f}\PYG{p}{:} \PYG{n}{soln\PYGZus{}dict} \PYG{o}{=} \PYG{n}{json}\PYG{o}{.}\PYG{n}{load}\PYG{p}{(}\PYG{n}{f}\PYG{p}{)} \PYG{c+c1}{\PYGZsh{} read JSON into dict} @@ -699,12 +705,12 @@ \section{A Simple Example} \begin{sphinxVerbatim}[commandchars=\\\{\}] \PYG{c+c1}{\PYGZsh{} DFO\PYGZhy{}LS example: minimize the Rosenbrock function} -\PYG{k+kn}{from} \PYG{n+nn}{\PYGZus{}\PYGZus{}future\PYGZus{}\PYGZus{}} \PYG{k+kn}{import} \PYG{n}{print\PYGZus{}function} -\PYG{k+kn}{import} \PYG{n+nn}{numpy} \PYG{k}{as} \PYG{n+nn}{np} -\PYG{k+kn}{import} \PYG{n+nn}{dfols} +\PYG{k+kn}{from}\PYG{+w}{ }\PYG{n+nn}{\PYGZus{}\PYGZus{}future\PYGZus{}\PYGZus{}}\PYG{+w}{ }\PYG{k+kn}{import} \PYG{n}{print\PYGZus{}function} +\PYG{k+kn}{import}\PYG{+w}{ }\PYG{n+nn}{numpy}\PYG{+w}{ }\PYG{k}{as}\PYG{+w}{ }\PYG{n+nn}{np} +\PYG{k+kn}{import}\PYG{+w}{ }\PYG{n+nn}{dfols} \PYG{c+c1}{\PYGZsh{} Define the objective function} -\PYG{k}{def} \PYG{n+nf}{rosenbrock}\PYG{p}{(}\PYG{n}{x}\PYG{p}{)}\PYG{p}{:} +\PYG{k}{def}\PYG{+w}{ }\PYG{n+nf}{rosenbrock}\PYG{p}{(}\PYG{n}{x}\PYG{p}{)}\PYG{p}{:} \PYG{k}{return} \PYG{n}{np}\PYG{o}{.}\PYG{n}{array}\PYG{p}{(}\PYG{p}{[}\PYG{l+m+mf}{10.0} \PYG{o}{*} \PYG{p}{(}\PYG{n}{x}\PYG{p}{[}\PYG{l+m+mi}{1}\PYG{p}{]} \PYG{o}{\PYGZhy{}} \PYG{n}{x}\PYG{p}{[}\PYG{l+m+mi}{0}\PYG{p}{]} \PYG{o}{*}\PYG{o}{*} \PYG{l+m+mi}{2}\PYG{p}{)}\PYG{p}{,} \PYG{l+m+mf}{1.0} \PYG{o}{\PYGZhy{}} \PYG{n}{x}\PYG{p}{[}\PYG{l+m+mi}{0}\PYG{p}{]}\PYG{p}{]}\PYG{p}{)} \PYG{c+c1}{\PYGZsh{} Define the starting point} @@ -795,7 +801,7 @@ \section{Adding Bounds and More Output} \begin{quote} \begin{sphinxVerbatim}[commandchars=\\\{\}] -\PYG{k+kn}{import} \PYG{n+nn}{logging} +\PYG{k+kn}{import}\PYG{+w}{ }\PYG{n+nn}{logging} \PYG{n}{logging}\PYG{o}{.}\PYG{n}{basicConfig}\PYG{p}{(}\PYG{n}{level}\PYG{o}{=}\PYG{n}{logging}\PYG{o}{.}\PYG{n}{INFO}\PYG{p}{,} \PYG{n+nb}{format}\PYG{o}{=}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+si}{\PYGZpc{}(message)s}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} \PYG{c+c1}{\PYGZsh{} ... (call dfols.solve)} @@ -895,11 +901,11 @@ \section{Adding General Convex Constraints} \begin{quote} \begin{sphinxVerbatim}[commandchars=\\\{\}] -\PYG{k+kn}{import} \PYG{n+nn}{numpy} \PYG{k}{as} \PYG{n+nn}{np} -\PYG{k+kn}{import} \PYG{n+nn}{dfols} +\PYG{k+kn}{import}\PYG{+w}{ }\PYG{n+nn}{numpy}\PYG{+w}{ }\PYG{k}{as}\PYG{+w}{ }\PYG{n+nn}{np} +\PYG{k+kn}{import}\PYG{+w}{ }\PYG{n+nn}{dfols} \PYG{c+c1}{\PYGZsh{} Define the objective function} -\PYG{k}{def} \PYG{n+nf}{rosenbrock}\PYG{p}{(}\PYG{n}{x}\PYG{p}{)}\PYG{p}{:} +\PYG{k}{def}\PYG{+w}{ }\PYG{n+nf}{rosenbrock}\PYG{p}{(}\PYG{n}{x}\PYG{p}{)}\PYG{p}{:} \PYG{k}{return} \PYG{n}{np}\PYG{o}{.}\PYG{n}{array}\PYG{p}{(}\PYG{p}{[}\PYG{l+m+mf}{10.0} \PYG{o}{*} \PYG{p}{(}\PYG{n}{x}\PYG{p}{[}\PYG{l+m+mi}{1}\PYG{p}{]} \PYG{o}{\PYGZhy{}} \PYG{n}{x}\PYG{p}{[}\PYG{l+m+mi}{0}\PYG{p}{]} \PYG{o}{*}\PYG{o}{*} \PYG{l+m+mi}{2}\PYG{p}{)}\PYG{p}{,} \PYG{l+m+mf}{1.0} \PYG{o}{\PYGZhy{}} \PYG{n}{x}\PYG{p}{[}\PYG{l+m+mi}{0}\PYG{p}{]}\PYG{p}{]}\PYG{p}{)} \PYG{c+c1}{\PYGZsh{} Define the starting point} @@ -991,8 +997,8 @@ \section{Adding a Regularizer} \begin{sphinxVerbatim}[commandchars=\\\{\}] \PYG{c+c1}{\PYGZsh{} DFO\PYGZhy{}LS example: regularized least\PYGZhy{}squares regression} -\PYG{k+kn}{import} \PYG{n+nn}{numpy} \PYG{k}{as} \PYG{n+nn}{np} -\PYG{k+kn}{import} \PYG{n+nn}{dfols} +\PYG{k+kn}{import}\PYG{+w}{ }\PYG{n+nn}{numpy}\PYG{+w}{ }\PYG{k}{as}\PYG{+w}{ }\PYG{n+nn}{np} +\PYG{k+kn}{import}\PYG{+w}{ }\PYG{n+nn}{dfols} \PYG{n}{n} \PYG{o}{=} \PYG{l+m+mi}{5} \PYG{c+c1}{\PYGZsh{} dimension of x} \PYG{n}{m} \PYG{o}{=} \PYG{l+m+mi}{10} \PYG{c+c1}{\PYGZsh{} number of residuals, i.e. dimension of b} @@ -1049,6 +1055,187 @@ \section{Adding a Regularizer} Note that many LASSO\sphinxhyphen{}type algorithms can produce a solution with many entries being exactly zero, but DFO\sphinxhyphen{}LS can only make them very small (related to how it calculates a new point with trust\sphinxhyphen{}region constraints). +\section{Using Initial Evaluation Database} +\label{\detokenize{userguide:using-initial-evaluation-database}} +\sphinxAtStartPar +Since DFO\sphinxhyphen{}LS v1.6, the input \sphinxcode{\sphinxupquote{x0}} may instead be an instance of a \sphinxcode{\sphinxupquote{dfols.EvaluationDatabase}} class containing a collection of previously evaluated +points and their associated vectors of residuals. One of these points must be flagged as the starting point for the solver (otherwise, the most recently added +point is used). DFO\sphinxhyphen{}LS will automaticaly select some (but possibly none/all) of the other points to help build its first internal approximation to the objective, +which reduces the number of times the objective must be evaluated during the initialization phase, before the main algorithm can begin. + +\sphinxAtStartPar +For example, suppose we want to use DFO\sphinxhyphen{}LS to minimize the Watson test function (Problem 20 from \sphinxcite{userguide:mgh1981}). Using the standard starting point, our code looks like +\begin{quote} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{k+kn}{import}\PYG{+w}{ }\PYG{n+nn}{numpy}\PYG{+w}{ }\PYG{k}{as}\PYG{+w}{ }\PYG{n+nn}{np} +\PYG{k+kn}{import}\PYG{+w}{ }\PYG{n+nn}{dfols} + +\PYG{c+c1}{\PYGZsh{} Define the objective function} +\PYG{k}{def}\PYG{+w}{ }\PYG{n+nf}{watson}\PYG{p}{(}\PYG{n}{x}\PYG{p}{)}\PYG{p}{:} + \PYG{n}{n} \PYG{o}{=} \PYG{n+nb}{len}\PYG{p}{(}\PYG{n}{x}\PYG{p}{)} + \PYG{n}{m} \PYG{o}{=} \PYG{l+m+mi}{31} + \PYG{n}{fvec} \PYG{o}{=} \PYG{n}{np}\PYG{o}{.}\PYG{n}{zeros}\PYG{p}{(}\PYG{p}{(}\PYG{n}{m}\PYG{p}{,}\PYG{p}{)}\PYG{p}{,} \PYG{n}{dtype}\PYG{o}{=}\PYG{n+nb}{float}\PYG{p}{)} + \PYG{k}{for} \PYG{n}{i} \PYG{o+ow}{in} \PYG{n+nb}{range}\PYG{p}{(}\PYG{l+m+mi}{1}\PYG{p}{,} \PYG{l+m+mi}{30}\PYG{p}{)}\PYG{p}{:} \PYG{c+c1}{\PYGZsh{} i=1,...,29} + \PYG{n}{div} \PYG{o}{=} \PYG{n+nb}{float}\PYG{p}{(}\PYG{n}{i}\PYG{p}{)} \PYG{o}{/} \PYG{l+m+mf}{29.0} + \PYG{n}{s1} \PYG{o}{=} \PYG{l+m+mf}{0.0} + \PYG{n}{dx} \PYG{o}{=} \PYG{l+m+mf}{1.0} + \PYG{k}{for} \PYG{n}{j} \PYG{o+ow}{in} \PYG{n+nb}{range}\PYG{p}{(}\PYG{l+m+mi}{2}\PYG{p}{,} \PYG{n}{n} \PYG{o}{+} \PYG{l+m+mi}{1}\PYG{p}{)}\PYG{p}{:} \PYG{c+c1}{\PYGZsh{} j = 2,...,n} + \PYG{n}{s1} \PYG{o}{=} \PYG{n}{s1} \PYG{o}{+} \PYG{p}{(}\PYG{n}{j} \PYG{o}{\PYGZhy{}} \PYG{l+m+mi}{1}\PYG{p}{)} \PYG{o}{*} \PYG{n}{dx} \PYG{o}{*} \PYG{n}{x}\PYG{p}{[}\PYG{n}{j} \PYG{o}{\PYGZhy{}} \PYG{l+m+mi}{1}\PYG{p}{]} + \PYG{n}{dx} \PYG{o}{=} \PYG{n}{div} \PYG{o}{*} \PYG{n}{dx} + \PYG{n}{s2} \PYG{o}{=} \PYG{l+m+mf}{0.0} + \PYG{n}{dx} \PYG{o}{=} \PYG{l+m+mf}{1.0} + \PYG{k}{for} \PYG{n}{j} \PYG{o+ow}{in} \PYG{n+nb}{range}\PYG{p}{(}\PYG{l+m+mi}{1}\PYG{p}{,} \PYG{n}{n} \PYG{o}{+} \PYG{l+m+mi}{1}\PYG{p}{)}\PYG{p}{:} \PYG{c+c1}{\PYGZsh{} j = 1,...,n} + \PYG{n}{s2} \PYG{o}{=} \PYG{n}{s2} \PYG{o}{+} \PYG{n}{dx} \PYG{o}{*} \PYG{n}{x}\PYG{p}{[}\PYG{n}{j} \PYG{o}{\PYGZhy{}} \PYG{l+m+mi}{1}\PYG{p}{]} + \PYG{n}{dx} \PYG{o}{=} \PYG{n}{div} \PYG{o}{*} \PYG{n}{dx} + \PYG{n}{fvec}\PYG{p}{[}\PYG{n}{i} \PYG{o}{\PYGZhy{}} \PYG{l+m+mi}{1}\PYG{p}{]} \PYG{o}{=} \PYG{n}{s1} \PYG{o}{\PYGZhy{}} \PYG{n}{s2} \PYG{o}{*}\PYG{o}{*} \PYG{l+m+mi}{2} \PYG{o}{\PYGZhy{}} \PYG{l+m+mf}{1.0} + \PYG{n}{fvec}\PYG{p}{[}\PYG{l+m+mi}{29}\PYG{p}{]} \PYG{o}{=} \PYG{n}{x}\PYG{p}{[}\PYG{l+m+mi}{0}\PYG{p}{]} + \PYG{n}{fvec}\PYG{p}{[}\PYG{l+m+mi}{30}\PYG{p}{]} \PYG{o}{=} \PYG{n}{x}\PYG{p}{[}\PYG{l+m+mi}{1}\PYG{p}{]} \PYG{o}{\PYGZhy{}} \PYG{n}{x}\PYG{p}{[}\PYG{l+m+mi}{0}\PYG{p}{]} \PYG{o}{*}\PYG{o}{*} \PYG{l+m+mi}{2} \PYG{o}{\PYGZhy{}} \PYG{l+m+mf}{1.0} + \PYG{k}{return} \PYG{n}{fvec} + +\PYG{c+c1}{\PYGZsh{} Define the starting point} +\PYG{n}{n} \PYG{o}{=} \PYG{l+m+mi}{6} +\PYG{n}{x0} \PYG{o}{=} \PYG{l+m+mf}{0.5} \PYG{o}{*} \PYG{n}{np}\PYG{o}{.}\PYG{n}{ones}\PYG{p}{(}\PYG{p}{(}\PYG{n}{n}\PYG{p}{,}\PYG{p}{)}\PYG{p}{,} \PYG{n}{dtype}\PYG{o}{=}\PYG{n+nb}{float}\PYG{p}{)} + +\PYG{c+c1}{\PYGZsh{} Show extra output to demonstrate the impact of using an initial evaluation database} +\PYG{k+kn}{import}\PYG{+w}{ }\PYG{n+nn}{logging} +\PYG{n}{logging}\PYG{o}{.}\PYG{n}{basicConfig}\PYG{p}{(}\PYG{n}{level}\PYG{o}{=}\PYG{n}{logging}\PYG{o}{.}\PYG{n}{INFO}\PYG{p}{,} \PYG{n+nb}{format}\PYG{o}{=}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+si}{\PYGZpc{}(message)s}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} + +\PYG{c+c1}{\PYGZsh{} Call DFO\PYGZhy{}LS} +\PYG{n}{soln} \PYG{o}{=} \PYG{n}{dfols}\PYG{o}{.}\PYG{n}{solve}\PYG{p}{(}\PYG{n}{watson}\PYG{p}{,} \PYG{n}{x0}\PYG{p}{)} + +\PYG{c+c1}{\PYGZsh{} Display output} +\PYG{n+nb}{print}\PYG{p}{(}\PYG{n}{soln}\PYG{p}{)} +\end{sphinxVerbatim} +\end{quote} + +\sphinxAtStartPar +In the output of this code, we can check that DFO\sphinxhyphen{}LS finds the unique minimizer of this function. We can also see that before the main loop can begin, +DFO\sphinxhyphen{}LS needs to evaluate the objective at the given starting point, and 6 extra points (since this problem has 6 variables to be minimized): +\begin{quote} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +Function eval 1 at point 1 has obj = 16.4308311759923 at x = [...] +Initialising (coordinate directions) +Function eval 2 at point 2 has obj = 28.9196967094733 at x = [...] +Function eval 3 at point 3 has obj = 22.0866904737059 at x = [...] +Function eval 4 at point 4 has obj = 20.6560889343479 at x = [...] +Function eval 5 at point 5 has obj = 19.2914312375462 at x = [...] +Function eval 6 at point 6 has obj = 18.0373781384725 at x = [...] +Function eval 7 at point 7 has obj = 16.8946356501339 at x = [...] +Beginning main loop +Function eval 8 at point 8 has obj = 8.45207899459595 at x = [...] +Function eval 9 at point 9 has obj = 2.54949692496583 at x = [...] +... +Function eval 90 at point 90 has obj = 0.00228767005355292 at x = [...] +Did a total of 1 run(s) + +****** DFO\PYGZhy{}LS Results ****** +Solution xmin = [\PYGZhy{}0.01572509 1.01243487 \PYGZhy{}0.23299162 1.26043004 \PYGZhy{}1.51372886 0.99299641] +Not showing residual vector because it is too long; check self.resid +Objective value f(xmin) = 0.002287670054 +Needed 90 objective evaluations (at 90 points) +Not showing approximate Jacobian because it is too long; check self.jacobian +Solution xmin was evaluation point 89 +Approximate Jacobian formed using evaluation points [87 85 76 89 86 88 84] +Exit flag = 0 +Success: rho has reached rhoend +**************************** +\end{sphinxVerbatim} +\end{quote} + +\sphinxAtStartPar +Instead of this, we can build a database of points where we have previously evaluated the objective, marking one of them as the starting point +for the algorithm. DFO\sphinxhyphen{}LS will then select some/all (but possibly none) of the other points and use them as initial evaluations, allowing it to begin +the main loop faster. In general, DFO\sphinxhyphen{}LS will select points that are: +\begin{itemize} +\item {} +\sphinxAtStartPar +Not too close/far from the selected starting point (relative to the initial trust\sphinxhyphen{}region radius, input \sphinxcode{\sphinxupquote{rhobeg}}) + +\item {} +\sphinxAtStartPar +Not in similar directions (relative to the selected starting point) to other selected initial points. For example, if several points differ from +the selected starting point in only the first variable, at most one of these will be selected. + +\end{itemize} + +\sphinxAtStartPar +The following code demonstrates how an evaluation database may be constructed and given to DFO\sphinxhyphen{}LS: +\begin{quote} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +\PYG{c+c1}{\PYGZsh{} Assuming numpy and dfols already imported, watson function already defined} + +\PYG{c+c1}{\PYGZsh{} Build a database of evaluations} +\PYG{n}{eval\PYGZus{}db} \PYG{o}{=} \PYG{n}{dfols}\PYG{o}{.}\PYG{n}{EvaluationDatabase}\PYG{p}{(}\PYG{p}{)} + +\PYG{c+c1}{\PYGZsh{} Define the starting point and add it to the database} +\PYG{n}{n} \PYG{o}{=} \PYG{l+m+mi}{6} +\PYG{n}{x0} \PYG{o}{=} \PYG{l+m+mf}{0.5} \PYG{o}{*} \PYG{n}{np}\PYG{o}{.}\PYG{n}{ones}\PYG{p}{(}\PYG{p}{(}\PYG{n}{n}\PYG{p}{,}\PYG{p}{)}\PYG{p}{,} \PYG{n}{dtype}\PYG{o}{=}\PYG{n+nb}{float}\PYG{p}{)} +\PYG{n}{eval\PYGZus{}db}\PYG{o}{.}\PYG{n}{append}\PYG{p}{(}\PYG{n}{x0}\PYG{p}{,} \PYG{n}{watson}\PYG{p}{(}\PYG{n}{x0}\PYG{p}{)}\PYG{p}{,} \PYG{n}{make\PYGZus{}starting\PYGZus{}eval}\PYG{o}{=}\PYG{k+kc}{True}\PYG{p}{)} +\PYG{c+c1}{\PYGZsh{} make\PYGZus{}starting\PYGZus{}eval=True \PYGZhy{}\PYGZhy{}\PYGZgt{} use this point as the starting point for DFO\PYGZhy{}LS} + +\PYG{c+c1}{\PYGZsh{} Add other points to the database} +\PYG{c+c1}{\PYGZsh{} Note: x0, x1 and x2 are colinear, so at least one of x1 and x2 will not be included in the initial model} +\PYG{n}{x1} \PYG{o}{=} \PYG{n}{np}\PYG{o}{.}\PYG{n}{ones}\PYG{p}{(}\PYG{p}{(}\PYG{n}{n}\PYG{p}{,}\PYG{p}{)}\PYG{p}{,} \PYG{n}{dtype}\PYG{o}{=}\PYG{n+nb}{float}\PYG{p}{)} +\PYG{n}{x2} \PYG{o}{=} \PYG{n}{np}\PYG{o}{.}\PYG{n}{zeros}\PYG{p}{(}\PYG{p}{(}\PYG{n}{n}\PYG{p}{,}\PYG{p}{)}\PYG{p}{,} \PYG{n}{dtype}\PYG{o}{=}\PYG{n+nb}{float}\PYG{p}{)} +\PYG{n}{x3} \PYG{o}{=} \PYG{n}{np}\PYG{o}{.}\PYG{n}{arange}\PYG{p}{(}\PYG{n}{n}\PYG{p}{)}\PYG{o}{.}\PYG{n}{astype}\PYG{p}{(}\PYG{n+nb}{float}\PYG{p}{)} +\PYG{n}{eval\PYGZus{}db}\PYG{o}{.}\PYG{n}{append}\PYG{p}{(}\PYG{n}{x1}\PYG{p}{,} \PYG{n}{watson}\PYG{p}{(}\PYG{n}{x1}\PYG{p}{)}\PYG{p}{)} +\PYG{n}{eval\PYGZus{}db}\PYG{o}{.}\PYG{n}{append}\PYG{p}{(}\PYG{n}{x2}\PYG{p}{,} \PYG{n}{watson}\PYG{p}{(}\PYG{n}{x2}\PYG{p}{)}\PYG{p}{)} +\PYG{n}{eval\PYGZus{}db}\PYG{o}{.}\PYG{n}{append}\PYG{p}{(}\PYG{n}{x3}\PYG{p}{,} \PYG{n}{watson}\PYG{p}{(}\PYG{n}{x3}\PYG{p}{)}\PYG{p}{)} + +\PYG{c+c1}{\PYGZsh{} Show extra output to demonstrate the impact of using an initial evaluation database} +\PYG{k+kn}{import}\PYG{+w}{ }\PYG{n+nn}{logging} +\PYG{n}{logging}\PYG{o}{.}\PYG{n}{basicConfig}\PYG{p}{(}\PYG{n}{level}\PYG{o}{=}\PYG{n}{logging}\PYG{o}{.}\PYG{n}{INFO}\PYG{p}{,} \PYG{n+nb}{format}\PYG{o}{=}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+si}{\PYGZpc{}(message)s}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} + +\PYG{c+c1}{\PYGZsh{} Call DFO\PYGZhy{}LS} +\PYG{n}{soln} \PYG{o}{=} \PYG{n}{dfols}\PYG{o}{.}\PYG{n}{solve}\PYG{p}{(}\PYG{n}{watson}\PYG{p}{,} \PYG{n}{x0}\PYG{p}{)} + +\PYG{c+c1}{\PYGZsh{} Display output} +\PYG{n+nb}{print}\PYG{p}{(}\PYG{n}{soln}\PYG{p}{)} +\end{sphinxVerbatim} +\end{quote} + +\sphinxAtStartPar +Running this code, we get the same (correct) answer but using fewer evaluations of the objective in the main call to \sphinxcode{\sphinxupquote{dfols.solve()}}. +The logging information reveals that \sphinxcode{\sphinxupquote{x0}} was used as the starting point, and \sphinxcode{\sphinxupquote{x1}} and \sphinxcode{\sphinxupquote{x3}} were used to build the initial model. +This means that only 4 evaluations of the objective were required in the initialization phase. +\begin{quote} + +\begin{sphinxVerbatim}[commandchars=\\\{\}] +Using pre\PYGZhy{}existing evaluation 0 as starting point +Adding pre\PYGZhy{}existing evaluation 1 to initial model +Adding pre\PYGZhy{}existing evaluation 3 to initial model +Function eval 1 at point 1 has obj = 15.1910664616598 at x = [...] +Function eval 2 at point 2 has obj = 15.2288491702299 at x = [...] +Function eval 3 at point 3 has obj = 15.228054997542 at x = [...] +Function eval 4 at point 4 has obj = 15.3011037277481 at x = [...] +Beginning main loop +Function eval 5 at point 5 has obj = 13.5524099633802 at x = [...] +Function eval 6 at point 6 has obj = 7.33371957636104 at x = [...] +... +Function eval 81 at point 81 has obj = 0.00228767005355266 at x = [...] +Did a total of 1 run(s) + +****** DFO\PYGZhy{}LS Results ****** +Solution xmin = [\PYGZhy{}0.01572509 1.01243487 \PYGZhy{}0.23299163 1.26043009 \PYGZhy{}1.51372893 0.99299643] +Not showing residual vector because it is too long; check self.resid +Objective value f(xmin) = 0.002287670054 +Needed 81 objective evaluations (at 81 points) +Not showing approximate Jacobian because it is too long; check self.jacobian +Solution xmin was evaluation point 77 +Approximate Jacobian formed using evaluation points [76 73 79 74 77 75 80] +Exit flag = 0 +Success: rho has reached rhoend +**************************** +\end{sphinxVerbatim} +\end{quote} + +\sphinxAtStartPar +Note that the indices of the evaluation database mentioned in the log refer to the order in which the points were added to the evaluation database. + + \section{Example: Noisy Objective Evaluation} \label{\detokenize{userguide:example-noisy-objective-evaluation}} \sphinxAtStartPar @@ -1057,16 +1244,16 @@ \section{Example: Noisy Objective Evaluation} \begin{sphinxVerbatim}[commandchars=\\\{\}] \PYG{c+c1}{\PYGZsh{} DFO\PYGZhy{}LS example: minimize the noisy Rosenbrock function} -\PYG{k+kn}{from} \PYG{n+nn}{\PYGZus{}\PYGZus{}future\PYGZus{}\PYGZus{}} \PYG{k+kn}{import} \PYG{n}{print\PYGZus{}function} -\PYG{k+kn}{import} \PYG{n+nn}{numpy} \PYG{k}{as} \PYG{n+nn}{np} -\PYG{k+kn}{import} \PYG{n+nn}{dfols} +\PYG{k+kn}{from}\PYG{+w}{ }\PYG{n+nn}{\PYGZus{}\PYGZus{}future\PYGZus{}\PYGZus{}}\PYG{+w}{ }\PYG{k+kn}{import} \PYG{n}{print\PYGZus{}function} +\PYG{k+kn}{import}\PYG{+w}{ }\PYG{n+nn}{numpy}\PYG{+w}{ }\PYG{k}{as}\PYG{+w}{ }\PYG{n+nn}{np} +\PYG{k+kn}{import}\PYG{+w}{ }\PYG{n+nn}{dfols} \PYG{c+c1}{\PYGZsh{} Define the objective function} -\PYG{k}{def} \PYG{n+nf}{rosenbrock}\PYG{p}{(}\PYG{n}{x}\PYG{p}{)}\PYG{p}{:} +\PYG{k}{def}\PYG{+w}{ }\PYG{n+nf}{rosenbrock}\PYG{p}{(}\PYG{n}{x}\PYG{p}{)}\PYG{p}{:} \PYG{k}{return} \PYG{n}{np}\PYG{o}{.}\PYG{n}{array}\PYG{p}{(}\PYG{p}{[}\PYG{l+m+mf}{10.0} \PYG{o}{*} \PYG{p}{(}\PYG{n}{x}\PYG{p}{[}\PYG{l+m+mi}{1}\PYG{p}{]} \PYG{o}{\PYGZhy{}} \PYG{n}{x}\PYG{p}{[}\PYG{l+m+mi}{0}\PYG{p}{]} \PYG{o}{*}\PYG{o}{*} \PYG{l+m+mi}{2}\PYG{p}{)}\PYG{p}{,} \PYG{l+m+mf}{1.0} \PYG{o}{\PYGZhy{}} \PYG{n}{x}\PYG{p}{[}\PYG{l+m+mi}{0}\PYG{p}{]}\PYG{p}{]}\PYG{p}{)} \PYG{c+c1}{\PYGZsh{} Modified objective function: add 1\PYGZpc{} Gaussian noise} -\PYG{k}{def} \PYG{n+nf}{rosenbrock\PYGZus{}noisy}\PYG{p}{(}\PYG{n}{x}\PYG{p}{)}\PYG{p}{:} +\PYG{k}{def}\PYG{+w}{ }\PYG{n+nf}{rosenbrock\PYGZus{}noisy}\PYG{p}{(}\PYG{n}{x}\PYG{p}{)}\PYG{p}{:} \PYG{k}{return} \PYG{n}{rosenbrock}\PYG{p}{(}\PYG{n}{x}\PYG{p}{)} \PYG{o}{*} \PYG{p}{(}\PYG{l+m+mf}{1.0} \PYG{o}{+} \PYG{l+m+mf}{1e\PYGZhy{}2} \PYG{o}{*} \PYG{n}{np}\PYG{o}{.}\PYG{n}{random}\PYG{o}{.}\PYG{n}{normal}\PYG{p}{(}\PYG{n}{size}\PYG{o}{=}\PYG{p}{(}\PYG{l+m+mi}{2}\PYG{p}{,}\PYG{p}{)}\PYG{p}{)}\PYG{p}{)} \PYG{c+c1}{\PYGZsh{} Define the starting point} @@ -1087,7 +1274,7 @@ \section{Example: Noisy Objective Evaluation} \PYG{n+nb}{print}\PYG{p}{(}\PYG{n}{soln}\PYG{p}{)} \PYG{c+c1}{\PYGZsh{} Compare with a derivative\PYGZhy{}based solver} -\PYG{k+kn}{import} \PYG{n+nn}{scipy}\PYG{n+nn}{.}\PYG{n+nn}{optimize} \PYG{k}{as} \PYG{n+nn}{opt} +\PYG{k+kn}{import}\PYG{+w}{ }\PYG{n+nn}{scipy}\PYG{n+nn}{.}\PYG{n+nn}{optimize}\PYG{+w}{ }\PYG{k}{as}\PYG{+w}{ }\PYG{n+nn}{opt} \PYG{n}{soln} \PYG{o}{=} \PYG{n}{opt}\PYG{o}{.}\PYG{n}{least\PYGZus{}squares}\PYG{p}{(}\PYG{n}{rosenbrock\PYGZus{}noisy}\PYG{p}{,} \PYG{n}{x0}\PYG{p}{)} \PYG{n+nb}{print}\PYG{p}{(}\PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{\PYGZdq{}}\PYG{p}{)} @@ -1183,9 +1370,9 @@ \section{Example: Parameter Estimation/Data Fitting} \PYG{c+c1}{\PYGZsh{} DFO\PYGZhy{}LS example: data fitting problem} \PYG{c+c1}{\PYGZsh{} Originally from:} \PYG{c+c1}{\PYGZsh{} https://uk.mathworks.com/help/optim/ug/lsqcurvefit.html} -\PYG{k+kn}{from} \PYG{n+nn}{\PYGZus{}\PYGZus{}future\PYGZus{}\PYGZus{}} \PYG{k+kn}{import} \PYG{n}{print\PYGZus{}function} -\PYG{k+kn}{import} \PYG{n+nn}{numpy} \PYG{k}{as} \PYG{n+nn}{np} -\PYG{k+kn}{import} \PYG{n+nn}{dfols} +\PYG{k+kn}{from}\PYG{+w}{ }\PYG{n+nn}{\PYGZus{}\PYGZus{}future\PYGZus{}\PYGZus{}}\PYG{+w}{ }\PYG{k+kn}{import} \PYG{n}{print\PYGZus{}function} +\PYG{k+kn}{import}\PYG{+w}{ }\PYG{n+nn}{numpy}\PYG{+w}{ }\PYG{k}{as}\PYG{+w}{ }\PYG{n+nn}{np} +\PYG{k+kn}{import}\PYG{+w}{ }\PYG{n+nn}{dfols} \PYG{c+c1}{\PYGZsh{} Observations} \PYG{n}{tdata} \PYG{o}{=} \PYG{n}{np}\PYG{o}{.}\PYG{n}{array}\PYG{p}{(}\PYG{p}{[}\PYG{l+m+mf}{0.9}\PYG{p}{,} \PYG{l+m+mf}{1.5}\PYG{p}{,} \PYG{l+m+mf}{13.8}\PYG{p}{,} \PYG{l+m+mf}{19.8}\PYG{p}{,} \PYG{l+m+mf}{24.1}\PYG{p}{,} \PYG{l+m+mf}{28.2}\PYG{p}{,} \PYG{l+m+mf}{35.2}\PYG{p}{,} @@ -1194,7 +1381,7 @@ \section{Example: Parameter Estimation/Data Fitting} \PYG{o}{\PYGZhy{}}\PYG{l+m+mf}{0.4}\PYG{p}{,} \PYG{o}{\PYGZhy{}}\PYG{l+m+mf}{1.3}\PYG{p}{,} \PYG{o}{\PYGZhy{}}\PYG{l+m+mf}{1.5}\PYG{p}{]}\PYG{p}{)} \PYG{c+c1}{\PYGZsh{} Model is y(t) = x[0] * exp(x[1] * t)} -\PYG{k}{def} \PYG{n+nf}{prediction\PYGZus{}error}\PYG{p}{(}\PYG{n}{x}\PYG{p}{)}\PYG{p}{:} +\PYG{k}{def}\PYG{+w}{ }\PYG{n+nf}{prediction\PYGZus{}error}\PYG{p}{(}\PYG{n}{x}\PYG{p}{)}\PYG{p}{:} \PYG{k}{return} \PYG{n}{ydata} \PYG{o}{\PYGZhy{}} \PYG{n}{x}\PYG{p}{[}\PYG{l+m+mi}{0}\PYG{p}{]} \PYG{o}{*} \PYG{n}{np}\PYG{o}{.}\PYG{n}{exp}\PYG{p}{(}\PYG{n}{x}\PYG{p}{[}\PYG{l+m+mi}{1}\PYG{p}{]} \PYG{o}{*} \PYG{n}{tdata}\PYG{p}{)} \PYG{c+c1}{\PYGZsh{} Define the starting point} @@ -1254,7 +1441,7 @@ \section{Example: Parameter Estimation/Data Fitting} \PYG{n}{ts} \PYG{o}{=} \PYG{n}{np}\PYG{o}{.}\PYG{n}{linspace}\PYG{p}{(}\PYG{l+m+mf}{0.0}\PYG{p}{,} \PYG{l+m+mf}{90.0}\PYG{p}{)} \PYG{n}{ys} \PYG{o}{=} \PYG{n}{soln}\PYG{o}{.}\PYG{n}{x}\PYG{p}{[}\PYG{l+m+mi}{0}\PYG{p}{]} \PYG{o}{*} \PYG{n}{np}\PYG{o}{.}\PYG{n}{exp}\PYG{p}{(}\PYG{n}{soln}\PYG{o}{.}\PYG{n}{x}\PYG{p}{[}\PYG{l+m+mi}{1}\PYG{p}{]} \PYG{o}{*} \PYG{n}{ts}\PYG{p}{)} -\PYG{k+kn}{import} \PYG{n+nn}{matplotlib}\PYG{n+nn}{.}\PYG{n+nn}{pyplot} \PYG{k}{as} \PYG{n+nn}{plt} +\PYG{k+kn}{import}\PYG{+w}{ }\PYG{n+nn}{matplotlib}\PYG{n+nn}{.}\PYG{n+nn}{pyplot}\PYG{+w}{ }\PYG{k}{as}\PYG{+w}{ }\PYG{n+nn}{plt} \PYG{n}{plt}\PYG{o}{.}\PYG{n}{figure}\PYG{p}{(}\PYG{l+m+mi}{1}\PYG{p}{)} \PYG{n}{ax} \PYG{o}{=} \PYG{n}{plt}\PYG{o}{.}\PYG{n}{gca}\PYG{p}{(}\PYG{p}{)} \PYG{c+c1}{\PYGZsh{} current axes} \PYG{n}{ax}\PYG{o}{.}\PYG{n}{plot}\PYG{p}{(}\PYG{n}{ts}\PYG{p}{,} \PYG{n}{ys}\PYG{p}{,} \PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{k\PYGZhy{}}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{,} \PYG{n}{label}\PYG{o}{=}\PYG{l+s+s1}{\PYGZsq{}}\PYG{l+s+s1}{Model}\PYG{l+s+s1}{\PYGZsq{}}\PYG{p}{)} @@ -1285,15 +1472,15 @@ \section{Example: Solving a Nonlinear System of Equations} \PYG{c+c1}{\PYGZsh{} Originally from:} \PYG{c+c1}{\PYGZsh{} http://support.sas.com/documentation/cdl/en/imlug/66112/HTML/default/viewer.htm\PYGZsh{}imlug\PYGZus{}genstatexpls\PYGZus{}sect004.htm} -\PYG{k+kn}{from} \PYG{n+nn}{\PYGZus{}\PYGZus{}future\PYGZus{}\PYGZus{}} \PYG{k+kn}{import} \PYG{n}{print\PYGZus{}function} -\PYG{k+kn}{from} \PYG{n+nn}{math} \PYG{k+kn}{import} \PYG{n}{exp} -\PYG{k+kn}{import} \PYG{n+nn}{numpy} \PYG{k}{as} \PYG{n+nn}{np} -\PYG{k+kn}{import} \PYG{n+nn}{dfols} +\PYG{k+kn}{from}\PYG{+w}{ }\PYG{n+nn}{\PYGZus{}\PYGZus{}future\PYGZus{}\PYGZus{}}\PYG{+w}{ }\PYG{k+kn}{import} \PYG{n}{print\PYGZus{}function} +\PYG{k+kn}{from}\PYG{+w}{ }\PYG{n+nn}{math}\PYG{+w}{ }\PYG{k+kn}{import} \PYG{n}{exp} +\PYG{k+kn}{import}\PYG{+w}{ }\PYG{n+nn}{numpy}\PYG{+w}{ }\PYG{k}{as}\PYG{+w}{ }\PYG{n+nn}{np} +\PYG{k+kn}{import}\PYG{+w}{ }\PYG{n+nn}{dfols} \PYG{c+c1}{\PYGZsh{} Want to solve:} \PYG{c+c1}{\PYGZsh{} x1 + x2 \PYGZhy{} x1*x2 + 2 = 0} \PYG{c+c1}{\PYGZsh{} x1 * exp(\PYGZhy{}x2) \PYGZhy{} 1 = 0} -\PYG{k}{def} \PYG{n+nf}{nonlinear\PYGZus{}system}\PYG{p}{(}\PYG{n}{x}\PYG{p}{)}\PYG{p}{:} +\PYG{k}{def}\PYG{+w}{ }\PYG{n+nf}{nonlinear\PYGZus{}system}\PYG{p}{(}\PYG{n}{x}\PYG{p}{)}\PYG{p}{:} \PYG{k}{return} \PYG{n}{np}\PYG{o}{.}\PYG{n}{array}\PYG{p}{(}\PYG{p}{[}\PYG{n}{x}\PYG{p}{[}\PYG{l+m+mi}{0}\PYG{p}{]} \PYG{o}{+} \PYG{n}{x}\PYG{p}{[}\PYG{l+m+mi}{1}\PYG{p}{]} \PYG{o}{\PYGZhy{}} \PYG{n}{x}\PYG{p}{[}\PYG{l+m+mi}{0}\PYG{p}{]}\PYG{o}{*}\PYG{n}{x}\PYG{p}{[}\PYG{l+m+mi}{1}\PYG{p}{]} \PYG{o}{+} \PYG{l+m+mi}{2}\PYG{p}{,} \PYG{n}{x}\PYG{p}{[}\PYG{l+m+mi}{0}\PYG{p}{]} \PYG{o}{*} \PYG{n}{exp}\PYG{p}{(}\PYG{o}{\PYGZhy{}}\PYG{n}{x}\PYG{p}{[}\PYG{l+m+mi}{1}\PYG{p}{]}\PYG{p}{)} \PYG{o}{\PYGZhy{}} \PYG{l+m+mf}{1.0}\PYG{p}{]}\PYG{p}{)} @@ -2073,6 +2260,19 @@ \section{Version 1.5.4 (11 Feb 2025)} \end{itemize} + +\section{Version 1.6 (10 Sep 2025)} +\label{\detokenize{history:version-1-6-10-sep-2025}}\begin{itemize} +\item {} +\sphinxAtStartPar +Allow use of evaluation database as \sphinxcode{\sphinxupquote{x0}} to reduce number of objective evaluations required in initialization phase + +\item {} +\sphinxAtStartPar +When printing solution object, reduce the maximum length of residual/Jacobian vectors that are fully displayed + +\end{itemize} + \sphinxstepscope @@ -2083,7 +2283,7 @@ \section{Main author} \label{\detokenize{contributors:main-author}}\begin{itemize} \item {} \sphinxAtStartPar -\sphinxhref{https://lindonroberts.github.io/}{Lindon Roberts} (University of Sydney) +\sphinxhref{https://lindonroberts.github.io/}{Lindon Roberts} (University of Melbourne) \end{itemize} @@ -2132,6 +2332,9 @@ \chapter{Acknowledgements} \bibitem[B2017]{userguide:b2017} \sphinxAtStartPar Amir Beck, \sphinxhref{https://doi.org/10.1137/1.9781611974997}{First\sphinxhyphen{}Order Methods in Optimization}, SIAM (2017). +\bibitem[MGH1981]{userguide:mgh1981} +\sphinxAtStartPar +Jorge J. More, Burton S. Garbow and Kenneth E. Hillstrom, \sphinxhref{https://doi.org/10.1145/355934.355936}{Testing Unconstrained Optimization Software}, \sphinxstyleemphasis{ACM Transactions on Mathematical Software}, 7:1 (1981), pp. 17\sphinxhyphen{}41. \bibitem[CFMR2018]{advanced:cfmr2018} \sphinxAtStartPar Coralia Cartis, Jan Fiala, Benjamin Marteau and Lindon Roberts, \sphinxhref{https://doi.org/10.1145/3338517}{Improving the Flexibility and Robustness of Model\sphinxhyphen{}Based Derivative\sphinxhyphen{}Free Optimization Solvers}, \sphinxstyleemphasis{ACM Transactions on Mathematical Software}, 45:3 (2019), pp. 32:1\sphinxhyphen{}32:41 {[}\sphinxhref{https://arxiv.org/abs/1804.00154}{preprint}{]} diff --git a/docs/build/latex/DFOLS.toc b/docs/build/latex/DFOLS.toc index 10ab062..a43f50c 100755 --- a/docs/build/latex/DFOLS.toc +++ b/docs/build/latex/DFOLS.toc @@ -10,7 +10,7 @@ \contentsline {section}{\numberline {2.1}When to use DFO\sphinxhyphen {}LS}{5}{section.2.1}% \contentsline {section}{\numberline {2.2}Parameter Fitting}{5}{section.2.2}% \contentsline {section}{\numberline {2.3}Solving Nonlinear Systems of Equations}{6}{section.2.3}% -\contentsline {section}{\numberline {2.4}Details of the DFO\sphinxhyphen {}LS Algorithm}{7}{section.2.4}% +\contentsline {section}{\numberline {2.4}Details of the DFO\sphinxhyphen {}LS Algorithm}{6}{section.2.4}% \contentsline {section}{\numberline {2.5}References}{7}{section.2.5}% \contentsline {chapter}{\numberline {3}Using DFO\sphinxhyphen {}LS}{9}{chapter.3}% \contentsline {section}{\numberline {3.1}Nonlinear Least\sphinxhyphen {}Squares Minimization}{9}{section.3.1}% @@ -20,52 +20,54 @@ \contentsline {section}{\numberline {3.5}Adding Bounds and More Output}{13}{section.3.5}% \contentsline {section}{\numberline {3.6}Adding General Convex Constraints}{15}{section.3.6}% \contentsline {section}{\numberline {3.7}Adding a Regularizer}{16}{section.3.7}% -\contentsline {section}{\numberline {3.8}Example: Noisy Objective Evaluation}{18}{section.3.8}% -\contentsline {section}{\numberline {3.9}Example: Parameter Estimation/Data Fitting}{20}{section.3.9}% -\contentsline {section}{\numberline {3.10}Example: Solving a Nonlinear System of Equations}{22}{section.3.10}% -\contentsline {section}{\numberline {3.11}References}{23}{section.3.11}% -\contentsline {chapter}{\numberline {4}Advanced Usage}{25}{chapter.4}% -\contentsline {section}{\numberline {4.1}General Algorithm Parameters}{25}{section.4.1}% -\contentsline {section}{\numberline {4.2}Logging and Output}{25}{section.4.2}% -\contentsline {section}{\numberline {4.3}Initialization of Points}{26}{section.4.3}% -\contentsline {section}{\numberline {4.4}Trust Region Management}{26}{section.4.4}% -\contentsline {section}{\numberline {4.5}Termination on Small Objective Value}{26}{section.4.5}% -\contentsline {section}{\numberline {4.6}Termination on Slow Progress}{26}{section.4.6}% -\contentsline {section}{\numberline {4.7}Stochastic Noise Information}{27}{section.4.7}% -\contentsline {section}{\numberline {4.8}Interpolation Management}{27}{section.4.8}% -\contentsline {section}{\numberline {4.9}Regression Model Management}{27}{section.4.9}% -\contentsline {section}{\numberline {4.10}Multiple Restarts}{27}{section.4.10}% -\contentsline {section}{\numberline {4.11}Dynamically Growing Initial Set}{28}{section.4.11}% -\contentsline {section}{\numberline {4.12}Dykstra’s Algorithm}{29}{section.4.12}% -\contentsline {section}{\numberline {4.13}Checking Matrix Rank}{29}{section.4.13}% -\contentsline {section}{\numberline {4.14}Handling regularizer}{29}{section.4.14}% -\contentsline {section}{\numberline {4.15}References}{30}{section.4.15}% -\contentsline {chapter}{\numberline {5}Diagnostic Information}{31}{chapter.5}% -\contentsline {section}{\numberline {5.1}Current Iterate}{31}{section.5.1}% -\contentsline {section}{\numberline {5.2}Trust Region}{31}{section.5.2}% -\contentsline {section}{\numberline {5.3}Model Interpolation}{32}{section.5.3}% -\contentsline {section}{\numberline {5.4}Iteration Count}{32}{section.5.4}% -\contentsline {section}{\numberline {5.5}Algorithm Progress}{32}{section.5.5}% -\contentsline {chapter}{\numberline {6}Version History}{33}{chapter.6}% -\contentsline {section}{\numberline {6.1}Version 1.0 (6 Feb 2018)}{33}{section.6.1}% -\contentsline {section}{\numberline {6.2}Version 1.0.1 (20 Feb 2018)}{33}{section.6.2}% -\contentsline {section}{\numberline {6.3}Version 1.0.2 (20 Jun 2018)}{33}{section.6.3}% -\contentsline {section}{\numberline {6.4}Version 1.1 (16 Jan 2019)}{33}{section.6.4}% -\contentsline {section}{\numberline {6.5}Version 1.1.1 (5 Apr 2019)}{34}{section.6.5}% -\contentsline {section}{\numberline {6.6}Version 1.2 (12 Feb 2020)}{34}{section.6.6}% -\contentsline {section}{\numberline {6.7}Version 1.2.1 (13 Feb 2020)}{34}{section.6.7}% -\contentsline {section}{\numberline {6.8}Version 1.2.2 (26 Feb 2021)}{34}{section.6.8}% -\contentsline {section}{\numberline {6.9}Version 1.2.3 (1 Jun 2021)}{34}{section.6.9}% -\contentsline {section}{\numberline {6.10}Version 1.3.0 (8 Nov 2021)}{34}{section.6.10}% -\contentsline {section}{\numberline {6.11}Version 1.4.0 (29 Jan 2024)}{35}{section.6.11}% -\contentsline {section}{\numberline {6.12}Version 1.4.1 (11 Apr 2024)}{35}{section.6.12}% -\contentsline {section}{\numberline {6.13}Version 1.5.0 (11 Sep 2024)}{35}{section.6.13}% -\contentsline {section}{\numberline {6.14}Version 1.5.1 (10 Oct 2024)}{35}{section.6.14}% -\contentsline {section}{\numberline {6.15}Version 1.5.2 (28 Oct 2024)}{35}{section.6.15}% -\contentsline {section}{\numberline {6.16}Version 1.5.3 (30 Oct 2024)}{35}{section.6.16}% -\contentsline {section}{\numberline {6.17}Version 1.5.4 (11 Feb 2025)}{35}{section.6.17}% -\contentsline {chapter}{\numberline {7}Contributors}{37}{chapter.7}% -\contentsline {section}{\numberline {7.1}Main author}{37}{section.7.1}% -\contentsline {section}{\numberline {7.2}Contributors}{37}{section.7.2}% -\contentsline {chapter}{\numberline {8}Acknowledgements}{39}{chapter.8}% -\contentsline {chapter}{Bibliography}{41}{chapter*.3}% +\contentsline {section}{\numberline {3.8}Using Initial Evaluation Database}{18}{section.3.8}% +\contentsline {section}{\numberline {3.9}Example: Noisy Objective Evaluation}{21}{section.3.9}% +\contentsline {section}{\numberline {3.10}Example: Parameter Estimation/Data Fitting}{23}{section.3.10}% +\contentsline {section}{\numberline {3.11}Example: Solving a Nonlinear System of Equations}{25}{section.3.11}% +\contentsline {section}{\numberline {3.12}References}{26}{section.3.12}% +\contentsline {chapter}{\numberline {4}Advanced Usage}{27}{chapter.4}% +\contentsline {section}{\numberline {4.1}General Algorithm Parameters}{27}{section.4.1}% +\contentsline {section}{\numberline {4.2}Logging and Output}{27}{section.4.2}% +\contentsline {section}{\numberline {4.3}Initialization of Points}{28}{section.4.3}% +\contentsline {section}{\numberline {4.4}Trust Region Management}{28}{section.4.4}% +\contentsline {section}{\numberline {4.5}Termination on Small Objective Value}{28}{section.4.5}% +\contentsline {section}{\numberline {4.6}Termination on Slow Progress}{28}{section.4.6}% +\contentsline {section}{\numberline {4.7}Stochastic Noise Information}{28}{section.4.7}% +\contentsline {section}{\numberline {4.8}Interpolation Management}{29}{section.4.8}% +\contentsline {section}{\numberline {4.9}Regression Model Management}{29}{section.4.9}% +\contentsline {section}{\numberline {4.10}Multiple Restarts}{29}{section.4.10}% +\contentsline {section}{\numberline {4.11}Dynamically Growing Initial Set}{30}{section.4.11}% +\contentsline {section}{\numberline {4.12}Dykstra’s Algorithm}{31}{section.4.12}% +\contentsline {section}{\numberline {4.13}Checking Matrix Rank}{31}{section.4.13}% +\contentsline {section}{\numberline {4.14}Handling regularizer}{31}{section.4.14}% +\contentsline {section}{\numberline {4.15}References}{31}{section.4.15}% +\contentsline {chapter}{\numberline {5}Diagnostic Information}{33}{chapter.5}% +\contentsline {section}{\numberline {5.1}Current Iterate}{33}{section.5.1}% +\contentsline {section}{\numberline {5.2}Trust Region}{33}{section.5.2}% +\contentsline {section}{\numberline {5.3}Model Interpolation}{33}{section.5.3}% +\contentsline {section}{\numberline {5.4}Iteration Count}{34}{section.5.4}% +\contentsline {section}{\numberline {5.5}Algorithm Progress}{34}{section.5.5}% +\contentsline {chapter}{\numberline {6}Version History}{35}{chapter.6}% +\contentsline {section}{\numberline {6.1}Version 1.0 (6 Feb 2018)}{35}{section.6.1}% +\contentsline {section}{\numberline {6.2}Version 1.0.1 (20 Feb 2018)}{35}{section.6.2}% +\contentsline {section}{\numberline {6.3}Version 1.0.2 (20 Jun 2018)}{35}{section.6.3}% +\contentsline {section}{\numberline {6.4}Version 1.1 (16 Jan 2019)}{35}{section.6.4}% +\contentsline {section}{\numberline {6.5}Version 1.1.1 (5 Apr 2019)}{35}{section.6.5}% +\contentsline {section}{\numberline {6.6}Version 1.2 (12 Feb 2020)}{35}{section.6.6}% +\contentsline {section}{\numberline {6.7}Version 1.2.1 (13 Feb 2020)}{36}{section.6.7}% +\contentsline {section}{\numberline {6.8}Version 1.2.2 (26 Feb 2021)}{36}{section.6.8}% +\contentsline {section}{\numberline {6.9}Version 1.2.3 (1 Jun 2021)}{36}{section.6.9}% +\contentsline {section}{\numberline {6.10}Version 1.3.0 (8 Nov 2021)}{36}{section.6.10}% +\contentsline {section}{\numberline {6.11}Version 1.4.0 (29 Jan 2024)}{36}{section.6.11}% +\contentsline {section}{\numberline {6.12}Version 1.4.1 (11 Apr 2024)}{36}{section.6.12}% +\contentsline {section}{\numberline {6.13}Version 1.5.0 (11 Sep 2024)}{36}{section.6.13}% +\contentsline {section}{\numberline {6.14}Version 1.5.1 (10 Oct 2024)}{36}{section.6.14}% +\contentsline {section}{\numberline {6.15}Version 1.5.2 (28 Oct 2024)}{37}{section.6.15}% +\contentsline {section}{\numberline {6.16}Version 1.5.3 (30 Oct 2024)}{37}{section.6.16}% +\contentsline {section}{\numberline {6.17}Version 1.5.4 (11 Feb 2025)}{37}{section.6.17}% +\contentsline {section}{\numberline {6.18}Version 1.6 (10 Sep 2025)}{37}{section.6.18}% +\contentsline {chapter}{\numberline {7}Contributors}{39}{chapter.7}% +\contentsline {section}{\numberline {7.1}Main author}{39}{section.7.1}% +\contentsline {section}{\numberline {7.2}Contributors}{39}{section.7.2}% +\contentsline {chapter}{\numberline {8}Acknowledgements}{41}{chapter.8}% +\contentsline {chapter}{Bibliography}{43}{chapter*.3}% diff --git a/docs/build/latex/Makefile b/docs/build/latex/Makefile index e4653f2..3d4f1c9 100755 --- a/docs/build/latex/Makefile +++ b/docs/build/latex/Makefile @@ -49,7 +49,8 @@ tar: all-$(FMT) rm -r $(ARCHIVEPREFIX)docs-$(FMT) gz: tar - gzip -9 < $(ARCHIVEPREFIX)docs-$(FMT).tar > $(ARCHIVEPREFIX)docs-$(FMT).tar.gz + # -n to omit mtime from gzip headers + gzip -n -9 < $(ARCHIVEPREFIX)docs-$(FMT).tar > $(ARCHIVEPREFIX)docs-$(FMT).tar.gz bz2: tar bzip2 -9 -k $(ARCHIVEPREFIX)docs-$(FMT).tar diff --git a/docs/build/latex/sphinx.sty b/docs/build/latex/sphinx.sty index 6c31f32..8837485 100755 --- a/docs/build/latex/sphinx.sty +++ b/docs/build/latex/sphinx.sty @@ -3,10 +3,13 @@ % % Adapted from the old python.sty, mostly written by Fred Drake, % by Georg Brandl. -% +% This has now grown to become a full-fledged LaTeX support, split +% among multiple files, some of which provide features unavailable +% from usual LaTeX packages in interaction with the mark-up produced +% by the Sphinx LaTeX writer. \NeedsTeXFormat{LaTeX2e}[1995/12/01] -\ProvidesPackage{sphinx}[2023/03/19 v6.2.0 LaTeX package (Sphinx markup)] +\ProvidesPackage{sphinx}[2024/11/23 v8.2.0 Sphinx LaTeX package (sphinx-doc)] % provides \ltx@ifundefined % (many packages load ltxcmds: graphicx does for pdftex and lualatex but @@ -34,26 +37,26 @@ } %% important build warnings use an undefined reference to induce latexmk %% into complaining (once per warning) at very end of console output -\newcommand\sphinxbuildwarning[1]{% - \ifcsname sphinx_emitted_#1\endcsname +\newcommand\sphinxbuildwarning[2][]{% + \ifcsname sphinx_emitted_#2\endcsname \else - \global\expandafter\let\csname sphinx_emitted_#1\endcsname\@empty + \global\expandafter\let\csname sphinx_emitted_#2\endcsname\@empty \AtEndDocument{\hbox{% should the printing of text be made conditional on - % some boolean? + % some boolean? (7.4.0 answers this by adding an + % optional argument and testing it here for emptiness + % but no usage is made of this novelty yet.) + \if\relax\detokenize{#1}\relax + % No [], print a red warning text at very end of document \bfseries\color{red}% - \@nameuse{sphinx_buildwarning_#1}% + \@nameuse{sphinx_buildwarning_#2}% + \fi % place an undefined reference deliberately \let\nfss@text\@gobble % no ?? - \ref{!!\@nameuse{sphinx_buildwarning_#1}}% - }}% + \ref{!!\@nameuse{sphinx_buildwarning_#2}}% + }% + }% \fi } -\@namedef{sphinx_buildwarning_coloursyntax}{% - The colours whose definition used xcolor syntax were set to white - as xcolor was not found; check the latex log warnings for details} -\@namedef{sphinx_buildwarning_colorblend}{% - Command \string\sphinxcolorblend\space seen but ignored in tables - as xcolor was not found; check the latex log warnings for details} \@namedef{sphinx_buildwarning_badtitlesec}{% Your system has titlesec version 2.10.1 which causes disappearance of section numbers; check the latex log warning for details} @@ -63,29 +66,28 @@ \@namedef{sphinx_buildwarning_badfootnotes}{% Footnote rendering may have had problems, due to extra package or document class; check latex log for instructions}% - +\@namedef{sphinx_buildwarning_badiconpackage}{% + You have set iconpackage=\spx@opt@iconpackage, but this LaTeX package + is not found}% %% OPTION HANDLING % - % We generally first handle options then load packages, but we need -% \definecolor from xcolor/color to handle the options. +% \definecolor and \colorlet from xcolor to handle the options. +% Support for colour options +% -------------------------- +% At 7.4.0, package xcolor is required (which has allowed to get rid of +% annoying fall-back branches). Internals here got refactored to some extent. +% % MEMO: xcolor \fcolorbox coloured boxes render better in some PDF viewers % than with color package \fcolorbox. Since 1.6.3, Sphinx uses only its own % custom variant of \fcolorbox when handling code-blocks. But \fcolorbox -% appears also in Pygmentize output mark-up. Also, since 5.3.0, 'sphinxsetup' -% color options get a richer input syntax if Sphinx knows xcolor is loaded, -% and the \sphinxcolorblend (for tables) is made available only if xcolor is -% loaded. -\IfFileExists{xcolor.sty}{ +% appears also in Pygmentize output mark-up. % Should Sphinx load xcolor with its dvipsnames and svgnames options? - \RequirePackage{xcolor} -}{ - \RequirePackage{color} -} +\RequirePackage{xcolor} -% the \colorlet of xcolor (if at all loaded) is overkill for most internal use +% the \colorlet of xcolor is overkill for our internal usage here \newcommand{\sphinxcolorlet}[2] {\expandafter\let\csname\@backslashchar color@#1\expandafter\endcsname \csname\@backslashchar color@#2\endcsname } @@ -93,6 +95,8 @@ % (5.3.0) Allow colour options to use both the \definecolor and the \colorlet % syntaxes, for example VerbatimColor={gray}{0.9} or VerbatimColor=red!10 % In the latter case we need the real \colorlet from xcolor package. +% Prior to 7.4.0 xcolor was not required and thus \spx@colorlet was configured +% to raise a warning in case of absence of xcolor. \def\spx@defineorletcolor#1{% \def\spx@definedcolor{{#1}}% \futurelet\spx@token\spx@defineorlet} @@ -101,21 +105,17 @@ \expandafter\spx@definecolor\else\expandafter\spx@colorlet\fi} \def\spx@colorlet#1\relax{\expandafter\colorlet\spx@definedcolor{#1}} \def\spx@definecolor{\expandafter\definecolor\spx@definedcolor} -% -\@ifpackageloaded{xcolor}% - {}% - {% xcolor not loaded because it was not found in the LaTeX installation -\def\spx@colorlet#1\relax{% - \sphinxbuildwarning{coloursyntax}% - \PackageWarning{sphinx}{% -Sorry, the #1 syntax requires package xcolor,\MessageBreak -which was not found on your TeX/LaTeX installation.\MessageBreak -\@spaces\expandafter\@firstofone\spx@definedcolor\MessageBreak -will be set to white}% - \expandafter\definecolor\spx@definedcolor{rgb}{1,1,1}% - }% end of redefinition of \spx@colorlet - }% end of xcolor not found branch - +% These internals refactored at 7.4.0: +\newcommand*{\spx@DeclareColorOption}[3][]{% +% #1 = almost always "sphinx" but left empty for a few for legacy reasons +% #2 = option name, but internal colour name is #1#2 (i.e. with prefix) +% #3 = initial default colour with either \definecolor or \colorlet syntax + % Set the initial default + \spx@defineorletcolor{#1#2}#3\relax + % Set the key handler to accept both \definecolor and \colorlet syntax + % The key name does not have the #1 prefix from the colour name + \define@key{sphinx}{#2}{\spx@defineorletcolor{#1#2}##1\relax}% +}% % Handle options via "kvoptions" (later loaded by hyperref anyhow) \RequirePackage{kvoptions} @@ -156,13 +156,19 @@ will be set to white}% \DeclareStringOption[-1]{numfigreset} \DeclareBoolOption[false]{nonumfigreset} \DeclareBoolOption[false]{mathnumfig} +\DeclareStringOption[.]{mathnumsep} \define@key{sphinx}{bookmarksdepth}{\AtBeginDocument{\hypersetup{bookmarksdepth=#1}}} \AtBeginDocument{\define@key{sphinx}{bookmarksdepth}{\hypersetup{bookmarksdepth=#1}}} % \DeclareBoolOption[false]{usespart}% not used + +% Code-blocks +% ----------- +% % INFO: the keys for padding and border widths were extended at 5.1.0, % and legacy names for user interface were kept, but their definitions % are delayed further down. The legacy internally used dimen registers % \sphinxverbatimborder and \sphinxverbatimsep got removed at 6.2.0. +% More code-blocks related options are found in "CSS" part below. \DeclareBoolOption[true]{verbatimwithframe} \DeclareBoolOption[true]{verbatimwrapslines} \DeclareBoolOption[false]{verbatimforcewraps} @@ -180,70 +186,50 @@ will be set to white}% \DeclareStringOption % must use braces to hide the brackets [{\makebox[2\fontcharwd\font`\x][r]{\textcolor{red}{\tiny$\m@th\hookrightarrow$}}}]% {verbatimcontinued} -% topic boxes + +% Topic boxes +% ----------- % % 5.1.0 added new keys for configuration. The legacy keys shadowsep, -% shadowsize, shadowrule were kept for backward compatibility. Unfortunately -% this had bugs due to typos, which got fixed later at 6.1.2. +% shadowsize, shadowrule were kept for backward compatibility. +% 5.1.2 fixed some bugs. % % All configuration is now to be found in the "CSS" section below. % -% \sphinxshadowsep, \sphinxshadowsize, \sphinxshadowrule \dimen registers -% became at 5.1.0 either no-op or, for the latter, were used under an aliased -% name. They got removed at 6.2.0. -% -% notices/admonitions -% -% 5.1.0 added much customizability to warning, caution, attention, danger and -% error types of notices via an enhanced sphinxheavybox environment. -% -% 6.2.0 added the possibility to use the same kind of rendering also for -% note, hint, important, and tip. -% -% Legacy user interface for options was kept working. All of it is handled in -% the "CSS" section below. -% -% These 6.2.0 added booleans serve internally. There is no reason for user to -% know about them, except if it is desired to toggle mid-way in the document -% whether note, hint, important, and tip should use the "lightbox" or the -% "heavybox" rendering. -\DeclareBoolOption[false]{heavynote} -\DeclareBoolOption[false]{heavyhint} -\DeclareBoolOption[false]{heavyimportant} -\DeclareBoolOption[false]{heavytip} -% footnotes +% 6.2.0 removed \sphinxshadowsep, \sphinxshadowsize, \sphinxshadowrule +% \dimen registers + +% Footnotes +% --------- \DeclareStringOption[\mbox{ }]{AtStartFootnote} % we need a public macro name for direct use in latex file \newcommand*{\sphinxAtStartFootnote}{\spx@opt@AtStartFootnote} % no such need for this one, as it is used inside other macros \DeclareStringOption[\leavevmode\unskip]{BeforeFootnote} -% some font styling. + +% Some font styling +% ----------------- +% TODO: the replacement of old syntax \py@HeaderFamily as used +% in sphinxlatexstyle{page,headings}.sty and sphinx{manual,howto}.cls +% has never been really put in place. Hence this isolated tidbit here. \DeclareStringOption[\sffamily\bfseries]{HeaderFamily} -% colours -% same problems as for dimensions: we want the key handler to use \definecolor. -% first, some colours with no prefix, for backward compatibility -\newcommand*{\sphinxDeclareColorOption}[2]{% - % set the initial default; only \definecolor syntax for defaults! - \definecolor{#1}#2% - % set the key handler to accept both \definecolor and \colorlet syntax - \define@key{sphinx}{#1}{\spx@defineorletcolor{#1}##1\relax}% -}% -\sphinxDeclareColorOption{TitleColor}{{rgb}{0.126,0.263,0.361}} -\sphinxDeclareColorOption{InnerLinkColor}{{rgb}{0.208,0.374,0.486}} -\sphinxDeclareColorOption{OuterLinkColor}{{rgb}{0.216,0.439,0.388}} -\sphinxDeclareColorOption{VerbatimColor}{{gray}{0.95}} -\sphinxDeclareColorOption{VerbatimBorderColor}{{RGB}{32,32,32}} -% all other colours will be named with a "sphinx" prefix -\newcommand*{\sphinxDeclareSphinxColorOption}[2]{% - % set the initial default; only \definecolor syntax for defaults! - \definecolor{sphinx#1}#2% - % set the key handler to accept both \definecolor and \colorlet syntax - \define@key{sphinx}{#1}{\spx@defineorletcolor{sphinx#1}##1\relax}% -}% -% table row colors -\sphinxDeclareSphinxColorOption{TableRowColorHeader}{{gray}{0.86}} -\sphinxDeclareSphinxColorOption{TableRowColorOdd}{{gray}{0.92}} -\sphinxDeclareSphinxColorOption{TableRowColorEven}{{gray}{0.98}} + +% Some legacy colour options +% -------------------------- +% +\spx@DeclareColorOption{TitleColor}{{rgb}{0.126,0.263,0.361}} +\spx@DeclareColorOption{InnerLinkColor}{{rgb}{0.208,0.374,0.486}} +\spx@DeclareColorOption{OuterLinkColor}{{rgb}{0.216,0.439,0.388}} +% The Verbatim ones are "legacy" only since 5.1.0... call it "new-legacy" ;-) +\spx@DeclareColorOption{VerbatimColor}{{RGB}{242,242,242}}% same as {gray}{0.95} +\spx@DeclareColorOption{VerbatimBorderColor}{{RGB}{32,32,32}} +% All other colours will be internally assigned a "sphinx" prefix + +% Table row colors (since 6.0.0) +% ---------------- +\spx@DeclareColorOption[sphinx]{TableRowColorHeader}{{gray}{0.86}} +\spx@DeclareColorOption[sphinx]{TableRowColorOdd}{{gray}{0.92}} +\spx@DeclareColorOption[sphinx]{TableRowColorEven}{{gray}{0.98}} % if not set, the "Merge" colour will keep in sync with the "Row" colour \def\sphinxTableMergeColorHeader{sphinxTableRowColorHeader} \define@key{sphinx}{TableMergeColorHeader}{% @@ -261,37 +247,67 @@ will be set to white}% \def\sphinxTableMergeColorEven{sphinxTableMergeColorEven}% }% % Default color chosen to be as in minted.sty LaTeX package! -\sphinxDeclareSphinxColorOption{VerbatimHighlightColor}{{rgb}{0.878,1,1}} -% admonition boxes, "light" style -% border color defaults to black -% at 6.2.0 also background color is possible, but it then triggers -% usage of the "sphinxheavybox" from sphinxlatexadmonitions.sty. -\sphinxDeclareSphinxColorOption{noteBorderColor}{{rgb}{0,0,0}} -\sphinxDeclareSphinxColorOption{hintBorderColor}{{rgb}{0,0,0}} -\sphinxDeclareSphinxColorOption{importantBorderColor}{{rgb}{0,0,0}} -\sphinxDeclareSphinxColorOption{tipBorderColor}{{rgb}{0,0,0}} -\sphinxDeclareSphinxColorOption{noteBgColor}{{rgb}{1,1,1}} -\sphinxDeclareSphinxColorOption{hintBgColor}{{rgb}{1,1,1}} -\sphinxDeclareSphinxColorOption{importantBgColor}{{rgb}{1,1,1}} -\sphinxDeclareSphinxColorOption{tipBgColor}{{rgb}{1,1,1}} -% admonition boxes, "heavy" style -% border color defaults to black and background color to white -% As long as the color are not explicitly set via user options, -% the sphinxpackageboxes.sty code will actually not use them anyhow. -\sphinxDeclareSphinxColorOption{warningBorderColor}{{rgb}{0,0,0}} -\sphinxDeclareSphinxColorOption{cautionBorderColor}{{rgb}{0,0,0}} -\sphinxDeclareSphinxColorOption{attentionBorderColor}{{rgb}{0,0,0}} -\sphinxDeclareSphinxColorOption{dangerBorderColor}{{rgb}{0,0,0}} -\sphinxDeclareSphinxColorOption{errorBorderColor}{{rgb}{0,0,0}} -% BgColor should have been from the start BackgroundColor for better -% match with CSS property names, but this is legacy interface -% which is too late to change because the internal color names -% and not only the option names have been documented at user level. -\sphinxDeclareSphinxColorOption{warningBgColor}{{rgb}{1,1,1}} -\sphinxDeclareSphinxColorOption{cautionBgColor}{{rgb}{1,1,1}} -\sphinxDeclareSphinxColorOption{attentionBgColor}{{rgb}{1,1,1}} -\sphinxDeclareSphinxColorOption{dangerBgColor}{{rgb}{1,1,1}} -\sphinxDeclareSphinxColorOption{errorBgColor}{{rgb}{1,1,1}} +\spx@DeclareColorOption[sphinx]{VerbatimHighlightColor}{{rgb}{0.878,1,1}} + +% Notices/admonitions +% ------------------- +% +% 5.1.0 added much customizability to warning, caution, attention, danger and +% error types of notices via an enhanced sphinxheavybox environment. +% +% 6.2.0 added the possibility to use the same kind of rendering also for +% note, hint, important, and tip. +% +% Legacy user interface for options was kept working. All of it is handled in +% the "CSS" section below. +% +% 6.2.0 added booleans to serve internally as a record of whether the +% note, hint, important and tip admonitions used the legacy "lightbox" or +% the then enhanced "heavybox" environment. +% +% 7.4.0 uses "heavybox" environment from sphinxlatexadmonitions in all cases, +% hence the booleans mentioned above have been removed as well as the rather +% complex TeX code which was done so that these booleans were made true if +% and only if the CSS-named keys had been made usage of via 'sphinxsetup'. +% +% The "light style" implemented in sphinxlatexadmonitions.sty as +% "sphinxlightbox" is not used. Also, admonitions by default have a "title +% row", and the corresponding options are only named in the CSS style which is +% implemented further below. Here we define options having a legacy name. +% +% seealso directive is also using "heavybox" at 7.4.0 acquiring the same +% customizability as admonitions. +% todo directive also. +\definecolor{sphinx-admonition-bgcolor} {RGB}{247, 247, 247}% #F7F7F7 +\definecolor{sphinx-admonition-bordercolor} {RGB}{134, 152, 155}% #86989B +\definecolor{sphinx-warning-bordercolor} {RGB}{148, 0, 0}% #940000 +\definecolor{sphinx-error-bordercolor} {RGB}{180, 0, 0}% #B40000 +\spx@DeclareColorOption[sphinx]{noteBorderColor} {sphinx-admonition-bordercolor} +\spx@DeclareColorOption[sphinx]{hintBorderColor} {sphinx-admonition-bordercolor} +\spx@DeclareColorOption[sphinx]{importantBorderColor}{sphinx-admonition-bordercolor} +\spx@DeclareColorOption[sphinx]{tipBorderColor} {sphinx-admonition-bordercolor} +\spx@DeclareColorOption[sphinx]{seealsoBorderColor} {sphinx-admonition-bordercolor}% 7.4.0 +\spx@DeclareColorOption[sphinx]{todoBorderColor} {sphinx-admonition-bordercolor}% 7.4.0 +% +\spx@DeclareColorOption[sphinx]{noteBgColor} {sphinx-admonition-bgcolor} +\spx@DeclareColorOption[sphinx]{hintBgColor} {sphinx-admonition-bgcolor} +\spx@DeclareColorOption[sphinx]{importantBgColor}{sphinx-admonition-bgcolor} +\spx@DeclareColorOption[sphinx]{tipBgColor} {sphinx-admonition-bgcolor} +\spx@DeclareColorOption[sphinx]{seealsoBgColor} {sphinx-admonition-bgcolor}% 7.4.0 +\spx@DeclareColorOption[sphinx]{todoBgColor} {sphinx-admonition-bgcolor}% 7.4.0 +% +\spx@DeclareColorOption[sphinx]{warningBorderColor} {sphinx-warning-bordercolor} +\spx@DeclareColorOption[sphinx]{cautionBorderColor} {sphinx-warning-bordercolor} +\spx@DeclareColorOption[sphinx]{attentionBorderColor}{sphinx-warning-bordercolor} +\spx@DeclareColorOption[sphinx]{dangerBorderColor} {sphinx-warning-bordercolor} +\spx@DeclareColorOption[sphinx]{errorBorderColor} {sphinx-error-bordercolor} +% +\spx@DeclareColorOption[sphinx]{warningBgColor} {sphinx-admonition-bgcolor} +\spx@DeclareColorOption[sphinx]{cautionBgColor} {sphinx-admonition-bgcolor} +\spx@DeclareColorOption[sphinx]{attentionBgColor}{sphinx-admonition-bgcolor} +\spx@DeclareColorOption[sphinx]{dangerBgColor} {sphinx-admonition-bgcolor} +\spx@DeclareColorOption[sphinx]{errorBgColor} {sphinx-admonition-bgcolor} +% %%%%%%%% % % Additions of CSS-like keys at 5.1.0 (and possibility of rounded boxes) @@ -324,14 +340,30 @@ will be set to white}% % finally been removed entirely. No more \dimen register is used here only % storage in macros. % +% Restyling at 7.4.0 with new defaults for all admonition types +% ------------------------------------------------------------- +% +% So far the 5.1.0 added possibilities for fancier boxes had been used by +% default only for code-blocks, and admonitions kept their old-fashioned +% legacy styles. At 7.4.0, as a follow-up to the revamped styles of +% admonitions in the HTML sphinx13 theme (PR #12439), it is decided to +% apply similar styling for PDF output. Also the seealso directive +% is handled as an admonition with the same customizability. And the +% todo directive. +% +% 8.1.0: style separately topic, contents, and sidebar directives +% --------------------------------------------------------------- +% +% And use some title row also for them (but without icon, per default). +% \def\spxstring@none{none} \def\spxstring@clone{clone} % % Border keys -% +% At 7.4.0 refactoring to avoid defining legacy \spx@@border +% macros which are (now) used nowhere, only @top, @right, @bottom, @left. \def\spx@tempa#1{% #1 = macro prefix \expandafter\spx@tempb - \csname #1border\expandafter\endcsname \csname #1border@top\expandafter\endcsname \csname #1border@right\expandafter\endcsname \csname #1border@bottom\expandafter\endcsname @@ -340,103 +372,122 @@ will be set to white}% \csname #1border@opentrue\expandafter\endcsname \csname #1border@openfalse\endcsname }% -\def\spx@tempb #1#2#3#4#5#6#7#8#9{% #9 = option prefix - \define@key{sphinx}{#9border-top-width}{\def#2{##1}}% - \define@key{sphinx}{#9border-right-width}{\def#3{##1}}% - \define@key{sphinx}{#9border-bottom-width}{\def#4{##1}}% - \define@key{sphinx}{#9border-left-width}{\def#5{##1}}% - \define@key{sphinx}{#9border-width}{% - \def#1{##1}% MEMO: not immediately expanded, should this be changed? - \def#2{#1}\let#3#2\let#4#2\let#5#2% +\def\spx@tempb #1#2#3#4#5#6#7#8#9{% #8 = option prefix + \define@key{sphinx}{#8border-top-width}{\def#1{##1}}% + \define@key{sphinx}{#8border-right-width}{\def#2{##1}}% + \define@key{sphinx}{#8border-bottom-width}{\def#3{##1}}% + \define@key{sphinx}{#8border-left-width}{\def#4{##1}}% + \define@key{sphinx}{#8border-width}{% + % MEMO: not immediately expanded, should this be changed? + \def#1{##1}\let#2#1\let#3#1\let#4#1% }% - \newif#6% - \define@key{sphinx}{#9box-decoration-break}% + \newif#5% + % 6.2.0 has added support for box-decoration-break also to admonition + % directives, formerly the option setting was ignored for them. + \define@key{sphinx}{#8box-decoration-break}% {\begingroup\edef\spx@tempa{##1}\expandafter\endgroup - \ifx\spx@tempa\spxstring@clone#8\else#7\fi}% - \spx@tempc{#9}% option prefix -} -\def\spx@tempc #1#2{% #1 = option prefix, #2 = legacy option name + \ifx\spx@tempa\spxstring@clone#7\else#6\fi}% + % 7.4.0 sets the default behaviour to "slice" not only for code-blocks but + % also for admonitions, as the latter now have a background colour each. + #6% + % #8 = option prefix (with underscore), #9 = legacy option name % keep legacy option names as aliases to new-named options - \expandafter\let\csname KV@sphinx@#2\expandafter\endcsname - \csname KV@sphinx@#1border-width\endcsname + \expandafter\let\csname KV@sphinx@#9\expandafter\endcsname + \csname KV@sphinx@#8border-width\endcsname % init border-width (fetches next argument) - \csname KV@sphinx@#1border-width\endcsname + \csname KV@sphinx@#8border-width\endcsname } -% MEMO: prior to 6.2.0 the \fboxrule value (0.4pt, a priori) was frozen here via -% a \dimen assignment done immediately. Now it remains \fboxrule until being used. +% MEMO: from 6.2.0 to 7.4.0 (excluive) \fboxrule was used in the first +% two, and was resolved only at location of use. At 7.4.0, we again +% use 0.4pt rather and not \fboxrule dimen register. % macro prefix option prefix legacy option init value -\spx@tempa{spx@pre@} {pre_} {verbatimborder} \fboxrule -\spx@tempa{spx@topic@} {div.topic_} {shadowrule} \fboxrule +\spx@tempa{spx@pre@} {pre_} {verbatimborder} {0.4pt} +\spx@tempa{spx@topic@} {div.topic_} {shadowrule} {0.5pt}% mod. at 7.4.0 +\spx@tempa{spx@contents@} {div.contents_} {shadowrule} {0.5pt}% 8.1.0 +\spx@tempa{spx@sidebar@} {div.sidebar_} {shadowrule} {1pt}% 8.1.0 +% let legacy shadowrule key set all topic/contents/sidebar border +% keys to the common value given by user to shadowrule +\def\KV@sphinx@shadowrule #1{% + \@nameuse{KV@sphinx@div.topic_border-width}{#1}% + \@nameuse{KV@sphinx@div.contents_border-width}{#1}% + \@nameuse{KV@sphinx@div.sidebar_border-width}{#1}% +}% \spx@tempa{spx@note@} {div.note_} {noteborder} {0.5pt} \spx@tempa{spx@hint@} {div.hint_} {hintborder} {0.5pt} \spx@tempa{spx@important@}{div.important_}{importantborder}{0.5pt} \spx@tempa{spx@tip@} {div.tip_} {tipborder} {0.5pt} +\spx@tempa{spx@seealso@} {div.seealso_} {seealsoborder} {0.5pt}% new at 7.4.0 +\spx@tempa{spx@todo@} {div.todo_} {todoborder} {0.5pt}% new at 7.4.0 \spx@tempa{spx@warning@} {div.warning_} {warningborder} {1pt} \spx@tempa{spx@caution@} {div.caution_} {cautionborder} {1pt} \spx@tempa{spx@attention@}{div.attention_}{attentionborder}{1pt} \spx@tempa{spx@danger@} {div.danger_} {dangerborder} {1pt} -\spx@tempa{spx@error@} {div.error_} {errorborder} {1pt} +\spx@tempa{spx@error@} {div.error_} {errorborder} {1.25pt}% mod. at 7.4.0 % this one new at 6.2.0: (we do not create a "legacy name" for it) -\spx@tempa{spx@box@} {box_} {box_border-width}\fboxrule -% Set default box-decoration-break style for codeblocks to slice -\spx@pre@border@opentrue % new default at 6.0.0: slice, not clone -% 6.2.0 has added support for box-decoration-break=slice to all -% other directives, formerly the option setting was ignored for them. +\spx@tempa{spx@box@} {box_} {box_border-width}{0.4pt} +% Reset default box-decoration-break style to "clone" for \sphinxbox, +% but anyhow this is ignored as \sphinxbox produces unbreakable boxes. +\spx@box@border@openfalse % Padding keys -% +% At 7.4.0, \spx@@padding internal macros removed, only @top, @right, +% @bottom, @left are actually needed by sphinxpackageboxes.sty. \def\spx@tempa#1{% \expandafter\spx@tempb - \csname #1padding\expandafter\endcsname \csname #1padding@top\expandafter\endcsname \csname #1padding@right\expandafter\endcsname \csname #1padding@bottom\expandafter\endcsname \csname #1padding@left\endcsname }% -\def\spx@tempb #1#2#3#4#5#6{% #6 = option prefix - \define@key{sphinx}{#6padding-top}{\def#2{##1}}% - \define@key{sphinx}{#6padding-right}{\def#3{##1}}% - \define@key{sphinx}{#6padding-bottom}{\def#4{##1}}% - \define@key{sphinx}{#6padding-left}{\def#5{##1}}% - \define@key{sphinx}{#6padding}{% - \def#1{##1}% - \def#2{#1}\let#3#2\let#4#2\let#5#2% +\def\spx@tempb #1#2#3#4#5#6#7#8#9{% #5 = option prefix + \define@key{sphinx}{#5padding-top}{\def#1{##1}}% + \define@key{sphinx}{#5padding-right}{\def#2{##1}}% + \define@key{sphinx}{#5padding-bottom}{\def#3{##1}}% + \define@key{sphinx}{#5padding-left}{\def#4{##1}}% + \define@key{sphinx}{#5padding}{% + \def#1{##1}\let#2#1\let#3#1\let#4#1% }% - % initialization (will fetch "init" argument next): - \csname KV@sphinx@#6padding\endcsname + % initial defaults + \def#1{#6}\def#2{#7}\def#3{#8}\def#4{#9}% } % MEMO: prior to 6.2.0 the \fboxsep value (3pt, a priori) was frozen here via -% a \dimen assignment done immediately. Now it remains \fboxsep until being used. -% #1 macro prefix #6 option prefix init value -\spx@tempa{spx@pre@} {pre_} \fboxsep -\spx@tempa{spx@topic@} {div.topic_} {5pt} -% MEMO: prior to 6.2.0, "note" type admonitions used sphinxlightbox automatically -% and had no interface to set the padding parameters needed by sphinxheavybox. -% At 6.2.0 they acquired such interface and the default is set as for legacy -% default of "warning" type. I hesitated using \fboxsep, but if I did I would -% then need to explain how to change "note etc..." into behaving exactly -% as "warning etc...", which goes via the \dimexpr here which is too scary to -% put sanely into documentation. -\spx@tempa{spx@note@} {div.note_} {\dimexpr.6\baselineskip-\spx@note@border\relax} -\spx@tempa{spx@hint@} {div.hint_} {\dimexpr.6\baselineskip-\spx@hint@border\relax} -\spx@tempa{spx@important@}{div.important_} {\dimexpr.6\baselineskip-\spx@important@border\relax} -\spx@tempa{spx@tip@} {div.tip_} {\dimexpr.6\baselineskip-\spx@tip@border\relax} -% MEMO: prior to 5.1.0 padding was not separately customizable from border -% width for warning type admonitions. The below keeps the legacy behavior of a -% constant borderwidth+padding. The dim expression is not evaluated yet, only -% at time of use (so that it dynamically adapts to the border width setting). -% MEMO: I could use everywhere \spx@notice@border, as sphinxadmonition environment -% configures it to hold the \spx@@border value. -\spx@tempa{spx@warning@} {div.warning_} {\dimexpr.6\baselineskip-\spx@warning@border\relax} -\spx@tempa{spx@caution@} {div.caution_} {\dimexpr.6\baselineskip-\spx@caution@border\relax} -\spx@tempa{spx@attention@}{div.attention_} {\dimexpr.6\baselineskip-\spx@attention@border\relax} -\spx@tempa{spx@danger@} {div.danger_} {\dimexpr.6\baselineskip-\spx@danger@border\relax} -\spx@tempa{spx@error@} {div.error_} {\dimexpr.6\baselineskip-\spx@error@border\relax} -\spx@tempa{spx@box@} {box_} \fboxsep +% a \dimen assignment done immediately. From 6.2.0 to 7.4.0 an unfrozen +% \fboxsep was used, and at 7.4.0 it is again explicit 3pt. +% The defaults for admonitions were all modified at 7.4.0. +% For topic/contents and all admonitions the horizontal padding plus borders +% are put inside the text area (i.e. do not go into the margins). +% In order for perfect exact same vertical alignment of contents from all such +% directives, the value of horizontal border-width+padding is kept constant +% (equal to 7.5pt since 7.4.0). +% 8.1.0 styles separately topic, contents, and sidebar. +% #1 macro prefix #6 option prefix top right bottom left +\spx@tempa{spx@pre@} {pre_} {3pt}{3pt}{3pt}{3pt} +\spx@tempa{spx@topic@} {div.topic_} {6pt}{7pt}{6pt}{7pt}% mod. at 8.1.0 +% contents styling inherits at 8.1.0 the former 7.4.0 topic defaults +\spx@tempa{spx@contents@} {div.contents_} {10pt}{7pt}{12pt}{7pt}% 8.1.0 +\spx@tempa{spx@sidebar@} {div.sidebar_} {6pt}{6.5pt}{6pt}{6.5pt}% 8.1.0 +% 7.4.0 drops legacy settings which linked strangely padding with border width +\spx@tempa{spx@note@} {div.note_} {6pt}{7pt}{6pt}{7pt} +\spx@tempa{spx@hint@} {div.hint_} {6pt}{7pt}{6pt}{7pt} +\spx@tempa{spx@important@}{div.important_} {6pt}{7pt}{6pt}{7pt} +\spx@tempa{spx@tip@} {div.tip_} {6pt}{7pt}{6pt}{7pt} +\spx@tempa{spx@seealso@} {div.seealso_} {6pt}{7pt}{6pt}{7pt} +\spx@tempa{spx@todo@} {div.todo_} {6pt}{7pt}{6pt}{7pt} +\spx@tempa{spx@warning@} {div.warning_} {6pt}{6.5pt}{6pt}{6.5pt} +\spx@tempa{spx@caution@} {div.caution_} {6pt}{6.5pt}{6pt}{6.5pt} +\spx@tempa{spx@attention@}{div.attention_} {6pt}{6.5pt}{6pt}{6.5pt} +\spx@tempa{spx@danger@} {div.danger_} {6pt}{6.5pt}{6pt}{6.5pt} +\spx@tempa{spx@error@} {div.error_} {6pt}{6.25pt}{6pt}{6.25pt} +\spx@tempa{spx@box@} {box_} {3pt}{3pt}{3pt}{3pt} % define legacy verbatimsep key as alias of pre_padding key \expandafter\let\expandafter\KV@sphinx@verbatimsep\csname KV@sphinx@pre_padding\endcsname -% define legacy shadowsep key as alias of div.topic_padding key -\expandafter\let\expandafter\KV@sphinx@shadowsep\csname KV@sphinx@div.topic_padding\endcsname +% let legacy shadowsep key set all topic/contents/sidebar padding +% keys to the common value given by user to shadosep +\def\KV@sphinx@shadowsep #1{% + \@nameuse{KV@sphinx@div.topic_padding}{#1}% + \@nameuse{KV@sphinx@div.contents_padding}{#1}% + \@nameuse{KV@sphinx@div.sidebar_padding}{#1}% +}% % Corner radii keys % @@ -450,30 +501,42 @@ will be set to white}% \csname #1radius@bottomright\expandafter\endcsname \csname #1radius@bottomleft\endcsname }% -\def\spx@tempb #1#2#3#4#5{% #5 = option prefix +\def\spx@tempb #1#2#3#4#5#6#7#8#9{% #5 = option prefix \define@key{sphinx}{#5border-top-left-radius}{\def#1{##1}}% \define@key{sphinx}{#5border-top-right-radius}{\def#2{##1}}% \define@key{sphinx}{#5border-bottom-right-radius}{\def#3{##1}}% \define@key{sphinx}{#5border-bottom-left-radius}{\def#4{##1}}% \define@key{sphinx}{#5border-radius}{\def#1{##1}\let#2#1\let#3#1\let#4#1}% - \csname KV@sphinx@#5border-radius\endcsname % fetches next argument + \def#1{#6}\def#2{#7}\def#3{#8}\def#4{#9}% } % The init value for corner radius in code-blocks was \z@ (i.e. 0pt) prior -% to 6.0.0., then 3pt, then \fboxsep at 6.2.0 as padding is \fboxsep, -% and \fboxsep=3pt per default (also with platex). -% macro prefix option prefix init value -\spx@tempa{spx@pre@} {pre_} \fboxsep -\spx@tempa{spx@topic@} {div.topic_} \z@ -\spx@tempa{spx@note@} {div.note_} \z@ -\spx@tempa{spx@hint@} {div.hint_} \z@ -\spx@tempa{spx@important@}{div.important_} \z@ -\spx@tempa{spx@tip@} {div.tip_} \z@ -\spx@tempa{spx@warning@} {div.warning_} \z@ -\spx@tempa{spx@caution@} {div.caution_} \z@ -\spx@tempa{spx@attention@}{div.attention_} \z@ -\spx@tempa{spx@danger@} {div.danger_} \z@ -\spx@tempa{spx@error@} {div.error_} \z@ -\spx@tempa{spx@box@} {box_} \fboxsep +% to 6.0.0., then 3pt, then \fboxsep at 6.2.0 as padding was also \fboxsep. +% At 7.4.0: +% - the 3pt is used (which is normal value of \fboxsep). +% - some admonitions use rounded corners as well. +% - topic boxed have only their bottom right corner rounded. +% At 8.1.0 topic, contents and sidebar separately styled. +% macro prefix option prefix tl tr br bl +\spx@tempa{spx@pre@} {pre_} {3pt}{3pt}{3pt}{3pt} +% use four rounded corners (and no shadow) for topic at 8.1.0 +\spx@tempa{spx@topic@} {div.topic_} {8pt}{8pt}{8pt}{8pt} +% contents inherits at 8.1.0 the 7.4.0 former styling of topic +\spx@tempa{spx@contents@} {div.contents_} \z@ \z@ {12pt} \z@ +% make sidebard distinctive as we can't really safely implement +% it with text flowing around it, but rather as a full width block +\spx@tempa{spx@sidebar@} {div.sidebar_} {12pt}\z@ {12pt} \z@ +\spx@tempa{spx@note@} {div.note_} {5pt}{5pt}{5pt}{5pt} +\spx@tempa{spx@hint@} {div.hint_} {5pt}{5pt}{5pt}{5pt} +\spx@tempa{spx@important@}{div.important_} \z@\z@\z@\z@ +\spx@tempa{spx@tip@} {div.tip_} {5pt}{5pt}{5pt}{5pt} +\spx@tempa{spx@seealso@} {div.seealso_} \z@\z@\z@\z@ +\spx@tempa{spx@todo@} {div.todo_} \z@\z@\z@\z@ +\spx@tempa{spx@warning@} {div.warning_} \z@\z@\z@\z@ +\spx@tempa{spx@caution@} {div.caution_} \z@\z@\z@\z@ +\spx@tempa{spx@attention@}{div.attention_} \z@\z@\z@\z@ +\spx@tempa{spx@danger@} {div.danger_} \z@\z@\z@\z@ +\spx@tempa{spx@error@} {div.error_} \z@\z@\z@\z@ +\spx@tempa{spx@box@} {box_} {3pt}{3pt}{3pt}{3pt} % Shadow keys % @@ -490,10 +553,14 @@ will be set to white}% % macro prefix \spx@tempa{spx@pre@} \spx@tempa{spx@topic@} +\spx@tempa{spx@contents@}% 8.1.0 +\spx@tempa{spx@sidebar@}% 8.1.0 \spx@tempa{spx@note@} \spx@tempa{spx@hint@} \spx@tempa{spx@important@} \spx@tempa{spx@tip@} +\spx@tempa{spx@seealso@}% 7.4.0 +\spx@tempa{spx@todo@}% 7.4.0 \spx@tempa{spx@warning@} \spx@tempa{spx@caution@} \spx@tempa{spx@attention@} @@ -521,13 +588,10 @@ will be set to white}% % used here. Since 6.2.0, expansion is delayed to time of use as for % the other dimensions handled above. This is synched with an added % encapsulation in \dimexpr...\relax by the "setup" from - % sphinxpackageboxes.sty. An induced regression had to be fixed in - % the sphinxShadowBox environment as it was using in an \ifdim the - % \spx@topic@shadow@yoffset macro, now holding by default 4pt+\z@ - % rather than an already digested 262144sp. The +\z@ is in case ##2 - % is empty. + % sphinxpackageboxes.sty. \else #1% - \def#6{##1}\def#7{##2+\z@}% + \def#6{##1}% + \if\relax\detokenize{##2}\relax\let#7#6\else\def#7{##2}\fi \if\relax\detokenize{##3}\relax#4\else#3\fi \fi }% @@ -535,12 +599,18 @@ will be set to white}% } \spx@tempa{spx@pre@} {pre_} \spx@tempa{spx@topic@} {div.topic_} -% This corresponds to the legacy parameters of ShadowBox - \spx@topic@shadow@setter 4pt 4pt {} \@nnil +\spx@tempa{spx@contents@} {div.contents_} +\spx@tempa{spx@sidebar@} {div.sidebar_} +% This corresponds to the legacy parameters for topic/contents/sidebar, +% but they are now only kept for contents + \spx@contents@shadow@setter 4pt 4pt {} \@nnil +% topic and sidebar default to no shadow \spx@tempa{spx@note@} {div.note_} \spx@tempa{spx@hint@} {div.hint_} \spx@tempa{spx@important@}{div.important_} \spx@tempa{spx@tip@} {div.tip_} +\spx@tempa{spx@seealso@} {div.seealso_} +\spx@tempa{spx@todo@} {div.todo_} \spx@tempa{spx@warning@} {div.warning_} \spx@tempa{spx@caution@} {div.caution_} \spx@tempa{spx@attention@}{div.attention_} @@ -548,24 +618,34 @@ will be set to white}% \spx@tempa{spx@error@} {div.error_} \spx@tempa{spx@box@} {box_} -% Support for legacy shadowsize (topic/contents) +% Support for legacy shadowsize (topic/contents/sidebar) % This definition was broken due to a typo at 5.1.0 and got fixed at 6.1.2 % MEMO: at 6.2.0 this no longer does \number\dimexpr in an \edef. Reason is to % keep in sync with div.topic_box-shadow handling of xoffset and yoffset. -% Attention in particular to \ifdim context, we add a \dimexpr to the one here. \define@key{sphinx}{shadowsize}{% \def\spx@topic@shadow@xoffset{#1}% - \let\spx@topic@shadow@yoffset\spx@topic@shadow@xoffset + \let\spx@contents@shadow@xoffset\spx@topic@shadow@xoffset + \let\spx@sidebar@shadow@xoffset \spx@topic@shadow@xoffset + \let\spx@topic@shadow@yoffset \spx@topic@shadow@xoffset + \let\spx@contents@shadow@yoffset\spx@topic@shadow@xoffset + \let\spx@sidebar@shadow@yoffset \spx@topic@shadow@xoffset \ifdim\dimexpr\spx@topic@shadow@xoffset=\z@ \spx@topic@withshadowfalse + \spx@contents@withshadowfalse + \spx@sidebar@withshadowfalse \else \spx@topic@withshadowtrue \spx@topic@insetshadowfalse + \spx@contents@withshadowtrue + \spx@contents@insetshadowfalse + \spx@sidebar@withshadowtrue + \spx@sidebar@insetshadowfalse \fi }% -% Color keys -% (four of them: border, background, shadow and the text color) +% Color keys, TeXextras key, keys for admonition titles with icon +% +% Historical remarks to be removed at some point: % % Some problems due to legacy naming scheme which had diverging conventions % for code-blocks (VerbatimBorderColor, VerbatimColor) and admonitions @@ -574,34 +654,42 @@ will be set to white}% % example sphinxwarningBgColor are also documented at user level, they are not % only internally used. % -% For topic directive, "legacy" (by this I mean Sphinx around 2016-2017 after -% my first additions to LaTeX) had no interface for colors, so I could change -% some internals with no breakage during 5.x up to 6.2.0. So topic -% (shadowbox) could be unified with admonitions (sphinxheavybox), and the -% "set-up" macros could all be moved into a single one in the -% sphinxpackageboxes.sty file, with only one argument holding the directive -% type. +% For topic directive, "legacy" (around 2016-2017) had no interface for +% colours, so some internals could be changed with no breakage during 5.x up +% to 6.2.0. For example topic (shadowbox) could be unified with admonitions +% (sphinxheavybox), and the "setup" macros could all be moved into a single +% one in the sphinxpackageboxes.sty file, with only one argument holding the +% directive type. % -% It was then needed only for sphinxlatexliterals.sty to let its +% It was then needed only by sphinxlatexliterals.sty to let its emitted % \spx@verb@boxes@fcolorbox@setup incorporate some extra adjustment. % -% We associate a boolean to each color, so that the box code can -% decide to insert a \color command or consider it is not needed. +% 7.4.0 removes usages of booleans relative to usage of a colour for +% background or border which were there to optimize the boxing code from +% sphinxpackageboxes.sty when colours where not needed. These were internal +% macros so their removal should not be considered breaking. +% We keep the infrastructure for "shadowcolor" and "textcolor" because the +% defaults for them remain not to have specific colour. +% +% 7.4.0 adds keys for admonition titles: for background and foreground colors, +% and for icons (whose defaults are picked from Free Fontawesome 5). \def\spx@tempa#1{% \expandafter\spx@tempb \csname if#1withshadowcolor\expandafter\endcsname - \csname if#1withbordercolor\expandafter\endcsname - \csname if#1withbackgroundcolor\expandafter\endcsname \csname if#1withtextcolor\endcsname }% -\def\spx@tempb#1#2#3#4{\newif#1\newif#2\newif#3\newif#4}% +\def\spx@tempb#1#2{\newif#1\newif#2}% % macro prefix \spx@tempa{spx@pre@} \spx@tempa{spx@topic@} +\spx@tempa{spx@contents@} +\spx@tempa{spx@sidebar@} \spx@tempa{spx@note@} \spx@tempa{spx@hint@} \spx@tempa{spx@important@} \spx@tempa{spx@tip@} +\spx@tempa{spx@seealso@} +\spx@tempa{spx@todo@} \spx@tempa{spx@warning@} \spx@tempa{spx@caution@} \spx@tempa{spx@attention@} @@ -611,29 +699,36 @@ will be set to white}% % \def\spx@tempa#1{% #1 = macro prefix \expandafter\spx@tempb - \csname #1withbordercolortrue\expandafter\endcsname - \csname #1withbackgroundcolortrue\expandafter\endcsname \csname #1withshadowcolortrue\expandafter\endcsname - \csname #1withtextcolortrue\endcsname + \csname #1withtextcolortrue\expandafter\endcsname + \csname #1TeXextras\endcsname } -\def\spx@tempb#1#2#3#4#5#6{% #5 = option prefix, #6 = color name prefix - \define@key{sphinx}{#5border-TeXcolor}% - {#1\spx@defineorletcolor{#6BorderColor}##1\relax}% - \define@key{sphinx}{#5background-TeXcolor}% - {#2\spx@defineorletcolor{#6BgColor}##1\relax}% - \define@key{sphinx}{#5box-shadow-TeXcolor}% - {#3\spx@defineorletcolor{#6ShadowColor}##1\relax}% - \define@key{sphinx}{#5TeXcolor}% - {#4\spx@defineorletcolor{#6TextColor}##1\relax}% +% 7.4.0 adds options for a title. They have an action only for admonitions, +% seealso and todo directives. +\def\spx@tempb#1#2#3#4#5{% #4 = option prefix, #5 = color name prefix + \define@key{sphinx}{#4border-TeXcolor}% + {\spx@defineorletcolor{#5BorderColor}##1\relax}% + \define@key{sphinx}{#4background-TeXcolor}% + {\spx@defineorletcolor{#5BgColor}##1\relax}% + \define@key{sphinx}{#4title-background-TeXcolor}% + {\spx@defineorletcolor{#5TtlBgColor}##1\relax}% + \define@key{sphinx}{#4title-foreground-TeXcolor}% + {\spx@defineorletcolor{#5TtlFgColor}##1\relax}% + \define@key{sphinx}{#4title-icon}% + {\@namedef{#5TtlIcon}{##1}}% + \define@key{sphinx}{#4box-shadow-TeXcolor}% + {#1\spx@defineorletcolor{#5ShadowColor}##1\relax}% + \define@key{sphinx}{#4TeXcolor}% + {#2\spx@defineorletcolor{#5TextColor}##1\relax}% + \define@key{sphinx}{#4TeXextras}% + {\def#3{##1}}% } % macro prefix option prefix color name prefix \spx@tempa{spx@pre@} {pre_} {Verbatim} % (memo: internal VerbatimShadowColor was formerly sphinxVerbatimShadowColor) % internal legacy color name is VerbatimColor not VerbatimBgColor, so redefine: \define@key{sphinx}{pre_background-TeXcolor}% - {\spx@pre@withbackgroundcolortrue\spx@defineorletcolor{VerbatimColor}#1\relax}% - \spx@pre@withbordercolortrue % 6.0.0 VerbatimBorderColor {RGB}{32,32,32} - \spx@pre@withbackgroundcolortrue % 6.0.0 VerbatimColor {gray}{0.95} + {\spx@defineorletcolor{VerbatimColor}#1\relax}% % Keep legacy option names working \expandafter\let\expandafter\KV@sphinx@VerbatimBorderColor \csname KV@sphinx@pre_border-TeXcolor\endcsname @@ -641,11 +736,17 @@ will be set to white}% \csname KV@sphinx@pre_background-TeXcolor\endcsname % (6.2.0 modified some internal namings for the colors of topic boxes) % macro prefix option prefix color name prefix -\spx@tempa{spx@topic@} {div.topic_} {sphinxtopic}% (no legacy interface) +% There was no legacy interface for topic/contents/sidebar +% 8.1.0 allows separate styling for topic/contents/sidebar +\spx@tempa{spx@topic@} {div.topic_} {sphinxtopic} +\spx@tempa{spx@contents@} {div.contents_} {sphinxcontents} +\spx@tempa{spx@sidebar@} {div.sidebar_} {sphinxsidebar} \spx@tempa{spx@note@} {div.note_} {sphinxnote} \spx@tempa{spx@hint@} {div.hint_} {sphinxhint} \spx@tempa{spx@important@}{div.important_} {sphinximportant} \spx@tempa{spx@tip@} {div.tip_} {sphinxtip} +\spx@tempa{spx@seealso@} {div.seealso_} {sphinxseealso} +\spx@tempa{spx@todo@} {div.todo_} {sphinxtodo} \spx@tempa{spx@warning@} {div.warning_} {sphinxwarning} \spx@tempa{spx@caution@} {div.caution_} {sphinxcaution} \spx@tempa{spx@attention@}{div.attention_} {sphinxattention} @@ -666,11 +767,12 @@ will be set to white}% \spx@tempa{div.error_} {error} % Keep legacy sphinxsetup BorderColor for =note, hint, ... - % which will not trigger sphinxheavybox - % Add "legacy" hintTextColor etc... that will not trigger sphinxheavybox + % Add "legacy" names BgColor (added at 7.4.0) and TextColor \def\spx@tempa#1#2{% #1 = CSS like option prefix, #2 = legacy option prefix \expandafter\let\csname KV@sphinx@#2BorderColor\expandafter\endcsname \csname KV@sphinx@#1border-TeXcolor\endcsname + \expandafter\let\csname KV@sphinx@#2BgColor\expandafter\endcsname + \csname KV@sphinx@#1background-TeXcolor\endcsname \expandafter\let\csname KV@sphinx@#2TextColor\expandafter\endcsname \csname KV@sphinx@#1TeXcolor\endcsname } @@ -679,28 +781,7 @@ will be set to white}% \spx@tempa{div.important_} {important} \spx@tempa{div.tip_} {tip} -% The TeXextras key -% -\def\spx@tempa#1{% #1 = macro prefix - \expandafter\spx@tempb\csname #1TeXextras\endcsname -} -\def\spx@tempb#1#2{% #2 = option prefix - \define@key{sphinx}{#2TeXextras}{\def#1{##1}}% -} -% macro prefix option prefix -\spx@tempa{spx@pre@} {pre_} -\spx@tempa{spx@topic@} {div.topic_} -\spx@tempa{spx@note@} {div.note_} -\spx@tempa{spx@hint@} {div.hint_} -\spx@tempa{spx@important@}{div.important_} -\spx@tempa{spx@tip@} {div.tip_} -\spx@tempa{spx@warning@} {div.warning_} -\spx@tempa{spx@caution@} {div.caution_} -\spx@tempa{spx@attention@}{div.attention_} -\spx@tempa{spx@danger@} {div.danger_} -\spx@tempa{spx@error@} {div.error_} -\spx@tempa{spx@box@} {box_} - % Add "legacy" hintTeXextras etc... that will not trigger sphinxheavybox + % Add "legacy" hintTeXextras etc... \def\spx@tempa#1#2{% #1 = CSS like option prefix, #2 = legacy option prefix \expandafter\let\csname KV@sphinx@#2TeXextras\expandafter\endcsname \csname KV@sphinx@#1TeXextras\endcsname @@ -710,64 +791,162 @@ will be set to white}% \spx@tempa{div.important_} {important} \spx@tempa{div.tip_} {tip} -% For note type admonitions, redefine all CSS-like named options to trigger -% the "heavybox" path. + % At 7.4.0, let topic/contents boxes acquire background and border colours + % and give the shadow some colour other than black + % 8.1.0 styles separately topic/contents/sidebar + % topic has no shadow but we keep 7.4.0 color in case it gets needed + \setkeys{sphinx}{% + div.topic_border-TeXcolor=sphinx-admonition-bordercolor, + div.topic_background-TeXcolor=sphinx-admonition-bgcolor, + div.topic_box-shadow-TeXcolor={RGB}{108,108,108}, + div.contents_border-TeXcolor=sphinx-admonition-bordercolor, + div.contents_background-TeXcolor=sphinx-admonition-bgcolor, + div.contents_box-shadow-TeXcolor={RGB}{108,108,108}, + div.sidebar_border-TeXcolor=sphinx-admonition-bordercolor, + div.sidebar_background-TeXcolor=sphinx-admonition-bgcolor, + div.sidebar_box-shadow-TeXcolor=sphinx-admonition-bordercolor!80,% #9eacaf + } + + +% 7.4.0 lets all types of admonitions style especially their titlss. +% The Sphinx default colours for admonition titles are copied from PR #12486 +% which modified sphinx13.css (see also earlier #12439) +% The actual code using the colours and icons whose defaults are set here +% is to be found in sphinxlatexadmonitions.sty. +% +% MEMO: unfortunately xcolor does NOT implement HSL but only HSB! +% So the sphinx13.css colours specified via hsl() got converted to RGB here +\definecolor{sphinx-admonition-title-bgcolor}{RGB}{229,229,229} % hsl(0, 0%, 90%); +\definecolor{sphinx-admonition-title-fgcolor}{RGB}{127,127,127} % hsl(0, 0%, 50%); +\definecolor{sphinx-warning-title-bgcolor} {RGB}{248,228,210} % hsl(28.5, 74%, 90%); +\definecolor{sphinx-warning-title-fgcolor} {RGB}{221,122,33} % hsl(28.5, 74%, 50%); +\definecolor{sphinx-note-title-bgcolor} {RGB}{208,222,250} % hsl(219.5, 84%, 90%); +\definecolor{sphinx-note-title-fgcolor} {RGB}{20,93,234} % hsl(219.5, 84%, 50%); +\definecolor{sphinx-success-title-bgcolor} {RGB}{220,239,230} % hsl(150, 36.7%, 90%); +\definecolor{sphinx-success-title-fgcolor} {RGB}{81,174,128} % hsl(150, 36.7%, 50%); +\definecolor{sphinx-error-title-bgcolor} {RGB}{238,220,220} % hsl(0, 37%, 90%); +\definecolor{sphinx-error-title-fgcolor} {RGB}{174,80,80} % hsl(0, 37%, 50%); +\definecolor{sphinx-todo-title-bgcolor} {RGB}{226,204,254} % hsl(266.8, 100%, 90%); +\definecolor{sphinx-todo-title-fgcolor} {RGB}{113,0,255} % hsl(266.8, 100%, 50%); + +% Now use the above colours as default settings, following the choices +% done in sphinx13.css +\setkeys{sphinx}{ + div.note_title-background-TeXcolor=sphinx-note-title-bgcolor, + div.note_title-foreground-TeXcolor=sphinx-note-title-fgcolor, +% + div.hint_title-background-TeXcolor=sphinx-success-title-bgcolor, + div.hint_title-foreground-TeXcolor=sphinx-success-title-fgcolor, + div.tip_title-background-TeXcolor=sphinx-success-title-bgcolor, + div.tip_title-foreground-TeXcolor=sphinx-success-title-fgcolor, + div.seealso_title-background-TeXcolor=sphinx-success-title-bgcolor, + div.seealso_title-foreground-TeXcolor=sphinx-success-title-fgcolor, + div.todo_title-background-TeXcolor=sphinx-todo-title-bgcolor, + div.todo_title-foreground-TeXcolor=sphinx-todo-title-fgcolor, +% + div.important_title-background-TeXcolor=sphinx-warning-title-bgcolor, + div.important_title-foreground-TeXcolor=sphinx-warning-title-fgcolor, + div.caution_title-background-TeXcolor=sphinx-warning-title-bgcolor, + div.caution_title-foreground-TeXcolor=sphinx-warning-title-fgcolor, + div.warning_title-background-TeXcolor=sphinx-warning-title-bgcolor, + div.warning_title-foreground-TeXcolor=sphinx-warning-title-fgcolor, +% + div.attention_title-background-TeXcolor=sphinx-error-title-bgcolor, + div.attention_title-foreground-TeXcolor=sphinx-error-title-fgcolor, + div.danger_title-background-TeXcolor=sphinx-error-title-bgcolor, + div.danger_title-foreground-TeXcolor=sphinx-error-title-fgcolor, + div.error_title-background-TeXcolor=sphinx-error-title-bgcolor, + div.error_title-foreground-TeXcolor=sphinx-error-title-fgcolor, % -% MEMO: the noteBorderColor and noteborder legacy options have already been -% re-created and they do not trigger the "heavybox" as their meaning will not -% be modified in the loop below contrarily to their CSS counterparts -% div.note_border-TeXcolor and div.note_border-width, and to the noteBgColor -% etc... which are handled below. +% 8.1.0 add title rows, but will not use icons per default, so +% the fgcolor setting will be used only if user uses title-icon key + div.topic_title-background-TeXcolor=sphinx-admonition-title-bgcolor, + div.topic_title-foreground-TeXcolor=sphinx-admonition-title-fgcolor, + div.contents_title-background-TeXcolor=sphinx-admonition-title-bgcolor, + div.contents_title-foreground-TeXcolor=sphinx-admonition-title-fgcolor, + div.sidebar_title-background-TeXcolor=sphinx-note-title-bgcolor, + div.sidebar_title-foreground-TeXcolor=sphinx-note-title-fgcolor, +} + +% 7.4.0 Support for icons in admonition titles +% We try to +% - get Sphinx PDF builds to process fine in absence of fontawesome5 +% - use fontawesome5 if present, but not if user prefers another package +% - provide an interface for using other LaTeX code for icons +% - provide an interface for using some other package than fontawesome5 +% Indeed we can't load fontawesome5 unconditionally even if available, +% as it proves incompatible with fontawesome package. +% We thus must delay its loading. +\IfFileExists{fontawesome5.sty}{% + \DeclareStringOption[fontawesome5]{iconpackage}% +}% +{% + \IfFileExists{fontawesome.sty} + {\DeclareStringOption[fontawesome]{iconpackage}} + {\DeclareStringOption[none]{iconpackage}}% +}% +\newcommand\spx@faIcon[2][]{}% +% The above \spx@faIcon which gobbles one mandatory and one optional +% argument is put into use only if both fontawesome5 and fontawesome +% LaTeX packages are not available, as part of the defaults for the +% div.*_title-icon keys (these keys can be redefined via the sphinxsetup +% interface). % -% This goes via rather hardcore TeX here. -\def\spx@tempa#1{\if\relax#1\expandafter\@gobble +\def\spxstring@fontawesome{fontawesome} +\def\spxstring@fontawesomev{fontawesome5} +\AtBeginDocument{% + \ifx\spx@opt@iconpackage\spxstring@none \else - \toks@{##1}% - \expandafter\def\csname KV@sphinx@div.note_#1\expandafter\endcsname - \the\toks0\expandafter{% - \csname spx@opt@heavynotetrue\expandafter\expandafter\expandafter\endcsname - \csname KV@sphinx@div.note_#1\endcsname{##1}}% - \expandafter\def\csname KV@sphinx@div.hint_#1\expandafter\endcsname - \the\toks0\expandafter{% - \csname spx@opt@heavyhinttrue\expandafter\expandafter\expandafter\endcsname - \csname KV@sphinx@div.hint_#1\endcsname{##1}}% - \expandafter\def\csname KV@sphinx@div.important_#1\expandafter\endcsname - \the\toks0\expandafter{% - \csname spx@opt@heavyimportanttrue\expandafter\expandafter\expandafter\endcsname - \csname KV@sphinx@div.important_#1\endcsname{##1}}% - \expandafter\def\csname KV@sphinx@div.tip_#1\expandafter\endcsname - \the\toks0\expandafter{% - \csname spx@opt@heavytiptrue\expandafter\expandafter\expandafter\endcsname - \csname KV@sphinx@div.tip_#1\endcsname{##1}}% + \IfFileExists{\spx@opt@iconpackage.sty} + {\RequirePackage{\spx@opt@iconpackage}% + \ifx\spx@opt@iconpackage\spxstring@fontawesomev + \renewcommand\spx@faIcon{\faIcon}% + \else + \ifx\spx@opt@iconpackage\spxstring@fontawesome + \renewcommand\spx@faIcon[2][]{\faicon{##2}}% + % The \ifdefined's are a bit silly because we know that + % fontawesome.sty does not provide it, but perhaps + % there can be some new release of that package? + \ifdefined\faicon@lightbulb\else + \let\faicon@lightbulb\faLightbulbO + \fi + \ifdefined\faicon@radiation\else + \let\faicon@radiation\faBolt + \fi + \ifdefined\faicon@pen\else + \let\faicon@pen\faPencil + \fi + % if neither has been required, \spx@faIcon will simply swallow + % its argument and it is up to user + % to set the various div.*_title-icon keys appropriately. + \fi\fi % + }% + {% + \sphinxbuildwarning{badiconpackage}% + \PackageWarningNoLine{sphinx}{% + You have set iconpackage=\spx@opt@iconpackage\MessageBreak + But \spx@opt@iconpackage.sty is not found by LaTeX} + }% \fi - \spx@tempa } -\spx@tempa{border-width}% - {border-top-width}{border-right-width}{border-bottom-width}{border-left-width}% - {box-decoration-break}% - {padding}% - {padding-top}{padding-right}{padding-bottom}{padding-left}% - {border-radius}% - {border-top-left-radius}{border-top-right-radius}% - {border-bottom-right-radius}{border-bottom-left-radius}% - {box-shadow}% - {border-TeXcolor}{background-TeXcolor}{box-shadow-TeXcolor}{TeXcolor}% - {TeXextras}% -\relax - -% Now we add at 6.2.0 BgColor et al. options which will trigger the -% "heavybox" as they are \let to the div._background-TeXColor option -% which has already been enhanced to set the boolean for rendering via -% "heavybox". This is in contrast with legacy BorderColor, -% and with the new TeXcolor and TeXextras. - \def\spx@tempa#1#2{% #1 = CSS like option prefix, #2 = legacy style option prefix - \expandafter\let\csname KV@sphinx@#2BgColor\expandafter\endcsname - \csname KV@sphinx@#1background-TeXcolor\endcsname - } - \spx@tempa{div.note_} {note} - \spx@tempa{div.hint_} {hint} - \spx@tempa{div.important_} {important} - \spx@tempa{div.tip_} {tip} + +\setkeys{sphinx}{ +% Icon defaults. + div.note_title-icon = \spx@faIcon{info-circle}, + div.hint_title-icon = \spx@faIcon[regular]{lightbulb}, + div.tip_title-icon = \spx@faIcon[regular]{lightbulb}, + div.seealso_title-icon = \spx@faIcon{share}, + div.todo_title-icon = \spx@faIcon{pen}, + div.important_title-icon = \spx@faIcon{pause-circle}, + div.caution_title-icon = \spx@faIcon{radiation}, + div.warning_title-icon = \spx@faIcon{exclamation-triangle}, + div.attention_title-icon = \spx@faIcon{exclamation-triangle}, + div.danger_title-icon = \spx@faIcon{radiation}, + div.error_title-icon = \spx@faIcon{times-circle}, +% MEMO: the new at 8.1.0 defaults for contents/topic/sidebar directives +% use no icons, they use \sphinxdotitlerow which detects automatically +% whether title-icon key has been set or not. +} \newif\ifspx@opt@box@addstrut \expandafter\def\csname KV@sphinx@box_addstrut\endcsname#1{% @@ -831,9 +1010,9 @@ will be set to white}% %% PASS OPTIONS % % pass options to hyperref; it must not have been loaded already -\input{sphinxoptionshyperref.sty} +\RequirePackage{sphinxoptionshyperref} % pass options to geometry; it must not have been loaded already -\input{sphinxoptionsgeometry.sty} +\RequirePackage{sphinxoptionsgeometry} %% COLOR (general) @@ -872,7 +1051,7 @@ will be set to white}% % % It will always be needed, so let's load it here \RequirePackage{graphicx} -\input{sphinxlatexgraphics.sty} +\RequirePackage{sphinxlatexgraphics} %% FRAMED ENVIRONMENTS @@ -918,30 +1097,34 @@ will be set to white}% } % Some of these defaults got already set. But we now list them all explicitly % for a complete initial configuration of reset storage. -% +% At 7.4.0, \fboxrule and \fboxsep replaced by 0.4pt and 3pt which are anyhow +% the defaults for these LaTeX dimensions. 8.2.0 corrected border-radius +% default back to 3pt (\fboxsep) not 0.4pt (\fboxrule). \let\spx@boxes@sphinxbox@defaults\@gobble \sphinxboxsetup{% - border-width=\fboxrule,% <-not really needed to avoid EOL space - padding=\fboxsep,% but done here out of habit - border-radius=\fboxsep,% - box-shadow=none,% -% As xcolor is perhaps not loaded we can not use background-TeXcolor=VerbatimColor -% which would not be compatible with \definecolor syntax. - border-TeXcolor={RGB}{32,32,32},% the default VerbatimBorderColor - background-TeXcolor={gray}{0.95},% the default VerbatimColor - box-shadow-TeXcolor={rgb}{0,0,0},% - TeXextras={},% - addstrut=false% (a final comma here would not hurt) + border-width=0.4pt, + padding=3pt, + border-radius=3pt, + box-shadow=none, +% MEMO: as xcolor is loaded, \spx@defineorletcolor has a "\colorlet" branch +% which makes this syntax acceptable and avoids duplicating here the values. + border-TeXcolor=VerbatimBorderColor, + background-TeXcolor=VerbatimColor, +% 7.4.0 modified the color of the shadow (anyhow box-shadow is set above to none +% so no shadow is drawn), to be as the new shadow colour of topic boxes. + box-shadow-TeXcolor={RGB}{108,108,108}, + TeXextras={}, + addstrut=false, }% \RequirePackage{sphinxpackageboxes} -\input{sphinxlatexadmonitions.sty} -\input{sphinxlatexliterals.sty} -\input{sphinxlatexshadowbox.sty} +\RequirePackage{sphinxlatexadmonitions} +\RequirePackage{sphinxlatexliterals} +\RequirePackage{sphinxlatexshadowbox} %% CONTAINERS % -\input{sphinxlatexcontainers.sty} +\RequirePackage{sphinxlatexcontainers} %% PYGMENTS @@ -951,17 +1134,17 @@ will be set to white}% %% TABLES % -\input{sphinxlatextables.sty} +\RequirePackage{sphinxlatextables} %% NUMBERING OF FIGURES, TABLES, AND LITERAL BLOCKS % -\input{sphinxlatexnumfig.sty} +\RequirePackage{sphinxlatexnumfig} %% LISTS % -\input{sphinxlatexlists.sty} +\RequirePackage{sphinxlatexlists} %% FOOTNOTES @@ -991,19 +1174,19 @@ will be set to white}% %% INDEX, BIBLIOGRAPHY, APPENDIX, TABLE OF CONTENTS % -\input{sphinxlatexindbibtoc.sty} +\RequirePackage{sphinxlatexindbibtoc} %% STYLING % -\input{sphinxlatexstylepage.sty} -\input{sphinxlatexstyleheadings.sty} -\input{sphinxlatexstyletext.sty} +\RequirePackage{sphinxlatexstylepage} +\RequirePackage{sphinxlatexstyleheadings} +\RequirePackage{sphinxlatexstyletext} %% MODULE RELEASE DATA AND OBJECT DESCRIPTIONS % -\input{sphinxlatexobjects.sty} +\RequirePackage{sphinxlatexobjects} % FIXME: this line should be dropped, as "9" is default anyhow. diff --git a/docs/build/latex/sphinx.xdy b/docs/build/latex/sphinx.xdy index 0dcf113..8df526e 100644 --- a/docs/build/latex/sphinx.xdy +++ b/docs/build/latex/sphinx.xdy @@ -99,7 +99,7 @@ ;; file, with a blank space after \IeC ;; Details of the syntax are explained at -;; http://xindy.sourceforge.net/doc/manual-3.html +;; https://xindy.sourceforge.net/doc/manual-3.html ;; In absence of :string, "xindy uses an auto-detection mechanism to decide, ;; if the pattern is a regular expression or not". But it is not obvious to ;; guess, for example "\\_" is not detected as RE but "\\P\{\}" is, so for diff --git a/docs/build/latex/sphinxlatexadmonitions.sty b/docs/build/latex/sphinxlatexadmonitions.sty index a31ae4c..0519903 100644 --- a/docs/build/latex/sphinxlatexadmonitions.sty +++ b/docs/build/latex/sphinxlatexadmonitions.sty @@ -1,53 +1,74 @@ %% NOTICES AND ADMONITIONS % % change this info string if making any custom modification -\ProvidesFile{sphinxlatexadmonitions.sty}[2023/03/19 admonitions] +\ProvidesPackage{sphinxlatexadmonitions}[2024/10/11 v8.1.1 admonitions] % Provides support for this output mark-up from Sphinx latex writer: % -% - sphinxseealso environment added at 6.1.0 +% - sphinxseealso environment added at 6.1.0. +% +% - sphinxtodo environment added at 7.4.0. % % - sphinxadmonition (environment) -% This is a dispatch supporting +% This is a dispatch which formerly configured % -% - note, hint, important, tip (via sphinxlightbox) -% (also optionally via sphinxheavybox since 6.2.0) -% - warning, caution, attention, danger, error (via sphinxheavybox) +% - note, hint, important, tip to use sphinxlightbox (or optionally +% sphinxheavybox since 6.2.0), +% - warning, caution, attention, danger, error to use sphinxheavybox. % -% Each sphinx environment can be redefined by user. -% The defaults are customizable via various colour and dimension -% settings, cf sphinx docs (latex customization). +% Since 7.4.0 all admonitions use sphinxheavybox. % -% Requires: -\RequirePackage{sphinxpackageboxes} -\RequirePackage{framed}% used by sphinxheavybox +% - All environments sphinxnote, sphinxwarning, etc... can be redefined as +% will by user. Thay have a single parameter #1 which is the title. +% +% - Also redefinable by user are the one-argument commands +% * \sphinxstylenotetitle, +% * \sphinxstylewarningtitle, +% * etc.... one for each admonition type (also seealso and todo). % +% - At 7.4.0, all commands of previous item use \sphinxdotitlerow. +% (the 7.4.0 name, still usable, was \sphinxdotitlerowwithicon; the 8.1.0 +% version is also used for topic, contents and sidebar directives, see +% sphinxlatexshadowbox.sty, and handles both "with icon" and "without +% icon" situations). +% +% The sphinxlightbox environment is kept for backward compatibility, for user +% custom code which used it via custom definitions done in preamble or via +% raw latex directive. +% MEMO: here is for example how sphinxnote was formerly defined: +% (where #1 is the localized string Note, followed with a colon) +% \newenvironment{sphinxnote}[1] +% {\begin{sphinxlightbox}\sphinxstrong{#1} } +% {\end{sphinxlightbox}} +% Use this if you want to revert the 7.4.0 switch to usage of sphinxheavybox. +% (the 7.4.0 redefined \sphinxstylenotetitle will not work in sphinxlightbox, +% so \sphinxstrong{#1} which was its former default is used above). + % Dependencies (they do not need to be defined at time of loading): % % - of course the various colour and dimension options handled via sphinx.sty -% % - dimension register \spx@image@maxheight from sphinxlatexgraphics.sty +% - \savenotes/\spewnotes from sphinxpackagefootnote.sty +% - \ifspx@inframed defined in sphinx.sty +% - \spx@boxes@fcolorbox@setup from sphinxpackageboxes.sty % -% - \savenotes/\spewnotes from sphinxpackagefootnote (for sphinxheavybox) +\RequirePackage{framed} +% Those are required either before or after by sphinx.sty anyhow, but for +% clarity we list them here: +\RequirePackage{sphinxlatexgraphics} +\RequirePackage{sphinxpackagefootnote} +\RequirePackage{sphinxpackageboxes} % -% - \sphinxstylenotetitle, ..., \sphinxstylewarningtitle, etc... which are used by -% default in the corresponding sphinx environments to replace at 6.2.0 -% formerly hard-coded \sphinxstrong{#1} -% Their definitions are in sphinxlatexstyletext.sty. - - % Provides: (also in sphinxlatexliterals.sty) +% Only needed here by legacy (deprecated) sphinxlightbox environment. \providecommand*\sphinxvspacefixafterfrenchlists{% \ifvmode\ifdim\lastskip<\z@ \vskip\parskip\fi\else\par\fi } -% Some are quite plain -\newenvironment{sphinxseealso}[1]{\sphinxstyleseealsotitle{#1}}{} - % This \dimen register is a legacy relic from Sphinx 1.5 which is used now % only for sphinxlightbox. It is set in the sphinxadmonition environment. \newdimen\spx@notice@border - +% sphinxlightbox is now also a legacy relic, not used by Sphinx anymore \newenvironment{sphinxlightbox}{% \par \noindent{\color{spx@notice@bordercolor}% @@ -65,55 +86,28 @@ {\linewidth}{\spx@notice@border}}\hss}\allowbreak }% end of sphinxlightbox environment definition -% note/hint/important/tip notices -% -% Since 1.5 these environments are named individually to allow user to -% redefine them entirely. +% Since 1.5 these environments are named individually sphinxnote, sphinxhint, +% etc... to allow user to redefine them entirely. % -% The Sphinx definitions were done like this, prior to 6.2.0: +% The Sphinx definitions for note/hint/important/tip notices were done like +% this, prior to 6.2.0: % % \newenvironment{sphinxhint}[1] % {\begin{sphinxlightbox}\sphinxstrong{#1} }{\end{sphinxlightbox}} % -% The more complex definition below will branch to sphinxheavybox if a certain -% boolean associated to the notice type is true. This boolean is set to true -% whenever a CSS-named alike options for the notice type has been used in -% sphinxsetup. The old coding as above would still work, with the new options -% being then simply ignored. A user redefinition will probably either use -% directly sphinxlightbox or sphinxheavybox or something else, with no need to -% test the boolean. -% -% 6.2.0 also adds one layer of mark-up via \sphinxnotetitle etc..., because -% the former \sphinxstrong{#1} used a too generic \sphinxstrong. But -% perhaps the #1 should be passed over to sphinx{light,heavy}box as parameter. -% Unfortunately replacing these environments with one-parameter environments -% would be potentially a breaking change. Anyway, sphinxpackageboxes.sty does not -% provide a "titled" box; the caption of code-blocks is handled by extra -% code in sphinxVerbatim. -\newenvironment{sphinxnote}[1] - {\edef\spx@env{sphinx\ifspx@opt@heavynote heavy\else light\fi box}% - \expandafter\begin\expandafter{\spx@env}\sphinxstylenotetitle{#1}} - {\expandafter\end\expandafter{\spx@env}} -\newenvironment{sphinxhint}[1] - {\edef\spx@env{sphinx\ifspx@opt@heavyhint heavy\else light\fi box}% - \expandafter\begin\expandafter{\spx@env}\sphinxstylehinttitle{#1}} - {\expandafter\end\expandafter{\spx@env}} -\newenvironment{sphinximportant}[1] - {\edef\spx@env{sphinx\ifspx@opt@heavyimportant heavy\else light\fi box}% - \expandafter\begin\expandafter{\spx@env}\sphinxstyleimportanttitle{#1}} - {\expandafter\end\expandafter{\spx@env}} -\newenvironment{sphinxtip}[1] - {\edef\spx@env{sphinx\ifspx@opt@heavytip heavy\else light\fi box}% - \expandafter\begin\expandafter{\spx@env}\sphinxstyletiptitle{#1}} - {\expandafter\end\expandafter{\spx@env}} - -% warning/caution/attention/danger/error get more distinction +% Then from 6.2.0 to 7.4.0 (exclusive) a more complex definition decided +% to use either sphinxlightbox or sphinxheavybox according to whether +% some CSS-like options had been used, for example for a background color. +% +% 6.2.0 also added one layer of mark-up via \sphinxnotetitle etc..., because +% the former \sphinxstrong{#1} used a too generic \sphinxstrong. +% +% At 7.4.0, sphinxheavybox environment is default for all types of notices +% and also for the seealso and todo directives. % % Code adapted from framed.sty's "snugshade" environment. % Nesting works (inner frames do not allow page breaks). \newenvironment{sphinxheavybox}{\par - % 6.2.0 allows to not have to distinguish here between warning type notices - % which always use sphinxheavybox or note type notices which might use it. % (MEMO: it is not a problem here if there is no sphinxShadowColor, % as it used only if set) \spx@boxes@fcolorbox@setup{\spx@noticetype}% @@ -205,16 +199,80 @@ % Example: % \renewcommand{\sphinxwarningtitle}[1]{\textbf{#1}\par\smallskip % {\color{sphinxwarningBorderColor}\hrule height1pt}\smallskip} +% +% - Since 7.4.0, all types of notices use sphinxheavybox and the default +% for \sphinxstyletitle is mapped to using \sphinxdotitlerowwithicon{} +% +% MEMO: except for the generic admonition directive (which uses "note" type) +% the argument #1 in these environments has a postfixed colon originating +% in Sphinx LaTeX writer legacy code. The +% \sphinxremovefinalcolon utility in sphinxlatexstyletext.sty can be used as +% \sphinxremovefinalcolon{#1} from inside the definitions of +% \sphinxstylenotetitle et al. commands. + +% Important: even prior to 5.1.0 it was not really possible to use directly +% sphinxheavybox if not triggered from sphinxadmonition, because some +% parameters were defined in sphinxadmonition. This meant that the +% sphinxwarning, sphinxcaution etc... environments (defined below) could not +% be used directly in a document, they had to be triggered via +% sphinxadmonition. The sole data since 5.1.0 needed by sphinxheavybox is the +% type of the notice which sphinxadmonition stores into \spx@noticetype. +% +% In order to facilitate recycling or imitation of the sphinx +% environments, 7.4.0 inserts an extra \def\spx@noticetype{} in their +% definitions, so that they can be used independently of sphinxadmonition +% dispatcher. +% +% MEMO: direct usage of these environments does not execute the div._TeXextras +% and div._TexColor code, there are only done from the sphinxadmonition wrapper. +\newenvironment{sphinxnote}[1] + {\def\spx@noticetype{note}\begin{sphinxheavybox}\sphinxstylenotetitle{#1}} + {\end{sphinxheavybox}} +\newenvironment{sphinxhint}[1] + {\def\spx@noticetype{hint}\begin{sphinxheavybox}\sphinxstylehinttitle{#1}} + {\end{sphinxheavybox}} +\newenvironment{sphinxtip}[1] + {\def\spx@noticetype{tip}\begin{sphinxheavybox}\sphinxstyletiptitle{#1}} + {\end{sphinxheavybox}} +\newenvironment{sphinximportant}[1] + {\def\spx@noticetype{important}\begin{sphinxheavybox}\sphinxstyleimportanttitle{#1}} + {\end{sphinxheavybox}} \newenvironment{sphinxwarning}[1] - {\begin{sphinxheavybox}\sphinxstylewarningtitle{#1}}{\end{sphinxheavybox}} + {\def\spx@noticetype{warning}\begin{sphinxheavybox}\sphinxstylewarningtitle{#1}} + {\end{sphinxheavybox}} \newenvironment{sphinxcaution}[1] - {\begin{sphinxheavybox}\sphinxstylecautiontitle{#1}}{\end{sphinxheavybox}} + {\def\spx@noticetype{caution}\begin{sphinxheavybox}\sphinxstylecautiontitle{#1}} + {\end{sphinxheavybox}} \newenvironment{sphinxattention}[1] - {\begin{sphinxheavybox}\sphinxstyleattentiontitle{#1}}{\end{sphinxheavybox}} + {\def\spx@noticetype{attention}\begin{sphinxheavybox}\sphinxstyleattentiontitle{#1}} + {\end{sphinxheavybox}} \newenvironment{sphinxdanger}[1] - {\begin{sphinxheavybox}\sphinxstyledangertitle{#1}}{\end{sphinxheavybox}} + {\def\spx@noticetype{danger}\begin{sphinxheavybox}\sphinxstyledangertitle{#1}} + {\end{sphinxheavybox}} \newenvironment{sphinxerror}[1] - {\begin{sphinxheavybox}\sphinxstyleerrortitle{#1}}{\end{sphinxheavybox}} + {\def\spx@noticetype{error}\begin{sphinxheavybox}\sphinxstyleerrortitle{#1}} + {\end{sphinxheavybox}} +% The "see also" was quite plain until 7.4.0 as it simply did +% \newenvironment{sphinxseealso}[1]{\sphinxstyleseealsotitle{#1}}{} +% Here we need to manually insert execution of div.seealso_TeX{color,extras} values +\newenvironment{sphinxseealso}[1] + {\def\spx@noticetype{seealso}% + \begin{sphinxheavybox}\sphinxstyleseealsotitle{#1}% + \ifspx@seealso@withtextcolor\color{sphinxseealsoTextColor}\fi + \spx@seealso@TeXextras + } + {\end{sphinxheavybox}} +% There was no sphinxtodo environment until 7.4.0 because sphinx.ext.todo +% generated \begin{sphinxadmonition}{note}{Todo:} mark-up. +\newcounter{sphinxtodo}% to provide targets from todolist directive output +\newenvironment{sphinxtodo}[1] + {\refstepcounter{sphinxtodo}\def\spx@noticetype{todo}% + \begin{sphinxheavybox}\sphinxstyletodotitle{#1}% + \ifspx@todo@withtextcolor\color{sphinxtodoTextColor}\fi + \spx@todo@TeXextras + } + {\end{sphinxheavybox}} + % the main dispatch for all types of notices \newenvironment{sphinxadmonition}[2]{% #1=type, #2=heading @@ -227,16 +285,119 @@ % the more bulky "sphinx\spx@noticetype BgColor". \sphinxcolorlet{spx@notice@bordercolor}{sphinx#1BorderColor}% \sphinxcolorlet{spx@notice@bgcolor}{sphinx#1BgColor}% - \spx@notice@border \dimexpr\csname spx@#1@border\endcsname\relax + % At 7.4.0 there are no \spx@@boder macros anymore only top, left, + % bottom, right. For this legacy \spx@notice@border only needed by + % sphinxlightbox (which is not used by own Sphinx environments anymore) + % we thus use here @top + \spx@notice@border \dimexpr\csname spx@#1@border@top\endcsname\relax % trigger the sphinx environment, #2=heading is passed as argument \begin{sphinx#1}{#2}% + % MEMO: the heading #2 will be typeset before the next lines are executed % 6.2.0 support of div._TeX{color,extras} options \csname ifspx@\spx@noticetype @withtextcolor\endcsname \color{sphinx\spx@noticetype TextColor}% \fi + % Other code to be executed at start of contents (after title) \csname spx@\spx@noticetype @TeXextras\endcsname } - % workaround some LaTeX "feature" of \end command (can't use "sphinx#1" here) + % workaround some LaTeX "feature" of \end command (i.e. can't use "sphinx#1" here) {\edef\spx@temp{\noexpand\end{sphinx\spx@noticetype}}\spx@temp} +% TODO: allow these next three settings to be customized individually. +% This can however already be done at user level by \renewcommand +% inside renew'ed environments sphinxnote, sphinxhint etc... +\newcommand\sphinxtitlerowtoppadding{5pt} +\newcommand\sphinxtitlerowbottompadding{3pt} +\newcommand\sphinxtitlerowaftericonspacecmd{\hskip0.5em\relax} +% 7.4.0 used this longer name: +\newcommand\sphinxdotitlerowwithicon{\sphinxdotitlerow} +\newcommand\sphinxdotitlerow[2]{% #1=type, #2=heading (without final colon) + \begingroup + \kern-\spx@boxes@padding@top + \parskip\z@skip % the \parskip business is a workaround to a vertical + % glue issue showing in LaTeX earlier than 2023-06-01 + \noindent + \kern-\spx@boxes@padding@left % must have been configured by a prior + % \spx@boxes@fcolorbox@setup{} + % inherit settings from the enclosing box and modify what is needed + \spx@boxes@border@top =\z@ + \spx@boxes@border@right =\z@ + \spx@boxes@border@bottom =\z@ + \spx@boxes@border@left =\z@ + \spx@boxes@radius@bottomright@x=\z@ + \spx@boxes@radius@bottomright@y=\z@ + \spx@boxes@radius@bottomleft@x=\z@ + \spx@boxes@radius@bottomleft@x=\z@ + \spx@boxes@padding@top =\sphinxtitlerowtoppadding\relax + \spx@boxes@padding@bottom=\sphinxtitlerowbottompadding\relax + \spx@boxes@withshadowfalse + \sphinxcolorlet{spx@boxes@backgroundcolor}{sphinx#1TtlBgColor}% + \spx@boxes@fcolorbox{% + \parbox[t]{\linewidth}{% 7.4.0 used \makebox, but wrapping of long titles + % is needed for generic admonition or topic box. + \sphinxAtStartPar + % 8.1.0 auto-drops extra space if no icon + \sbox\z@{\@nameuse{sphinx#1TtlIcon}}% + \ifdim\wd\z@>\z@ + \textcolor{sphinx#1TtlFgColor}{% + \@nameuse{sphinx#1TtlIcon}% + % The next macro is located here for legacy reasons of earlier + % functioning of \spx@faIcon. When fontawesome{5,}.sty both + % are unavailable, it (formerly) gobbled this next macro. + % We leave it here now although it could be moved to after + % the closing brace. + \sphinxtitlerowaftericonspacecmd + }% + \fi + \sphinxstrong{#2}% + \strut + \par + }% + }% + \kern-\spx@boxes@padding@right + \par + \endgroup + \vskip-\parskip + \kern\spx@boxes@padding@top +} + +% #1 holds the localized name of the notice, postfixed with a colon. +% \sphinxremovefinalcolon{#1} will typeset #1 without the colon. +% Legacy definitions (done in sphinxlatexstyletext.sty) were all using +% a boring plain \sphinxstrong{#1}, now we use a coloured title row. +\newcommand\sphinxstylenotetitle [1]{\sphinxdotitlerow{note}{\sphinxremovefinalcolon{#1}}} +\newcommand\sphinxstylehinttitle [1]{\sphinxdotitlerow{hint}{\sphinxremovefinalcolon{#1}}} +\newcommand\sphinxstyleimportanttitle[1]{\sphinxdotitlerow{important}{\sphinxremovefinalcolon{#1}}} +\newcommand\sphinxstyletiptitle [1]{\sphinxdotitlerow{tip}{\sphinxremovefinalcolon{#1}}} +\newcommand\sphinxstylewarningtitle [1]{\sphinxdotitlerow{warning}{\sphinxremovefinalcolon{#1}}} +\newcommand\sphinxstylecautiontitle [1]{\sphinxdotitlerow{caution}{\sphinxremovefinalcolon{#1}}} +\newcommand\sphinxstyleattentiontitle[1]{\sphinxdotitlerow{attention}{\sphinxremovefinalcolon{#1}}} +\newcommand\sphinxstyledangertitle [1]{\sphinxdotitlerow{danger}{\sphinxremovefinalcolon{#1}}} +\newcommand\sphinxstyleerrortitle [1]{\sphinxdotitlerow{error}{\sphinxremovefinalcolon{#1}}} +\newcommand\sphinxstyleseealsotitle [1]{\sphinxdotitlerow{seealso}{\sphinxremovefinalcolon{#1}}} +\newcommand\sphinxstyletodotitle [1]{\sphinxdotitlerow{todo}{\sphinxremovefinalcolon{#1}}} +% +% A utility to remove a final colon. Removing last token is not easy in +% LaTeX, and there are additional complications: +% - some languages will make the : "active" in document body, +% - the generic admonition ends up using "note", so for \sphinxnotetitle to +% use it safely, the utility has to allow an input not having any final colon. +% - a bit far-fetched but maybe there is more than one colon inside the input +% (possible from a generic admonition title). +% Hence the scary code. +\newcommand\sphinxremovefinalcolon[1]{% #1 is the "active" : TeX token +% Prior to 7.4.0 this was defined with \protected\def but we do not +% see what usefulness this could have. +\renewcommand\sphinxremovefinalcolon[1]{% + % complications due to : possibly "active" + \begingroup\ifnum\catcode`:=\active + \def\x####1#1\relax{####1}% + \else\def\x####1:\relax{####1}\fi + \expandafter\endgroup\x##1\relax + % trick to let \x work also if input ##1 has no ending colon + \@gobblefour#1\relax:\relax\relax\relax + }% +}% end of wrapper to inject active : +\begingroup\catcode`:\active\expandafter\endgroup\sphinxremovefinalcolon: + \endinput diff --git a/docs/build/latex/sphinxlatexcontainers.sty b/docs/build/latex/sphinxlatexcontainers.sty index 93b2c8c..012d9ee 100644 --- a/docs/build/latex/sphinxlatexcontainers.sty +++ b/docs/build/latex/sphinxlatexcontainers.sty @@ -1,7 +1,7 @@ %% CONTAINER DIRECTIVES % % change this info string if making any custom modification -\ProvidesFile{sphinxlatexcontainers.sty}[2021/05/03 containers] +\ProvidesPackage{sphinxlatexcontainers}[2021/05/03 containers] % The purpose of this file is to provide a dummy environment sphinxclass which % will be inserted for each class in each container directive. The class name diff --git a/docs/build/latex/sphinxlatexgraphics.sty b/docs/build/latex/sphinxlatexgraphics.sty index fd0aae6..f0c7c25 100644 --- a/docs/build/latex/sphinxlatexgraphics.sty +++ b/docs/build/latex/sphinxlatexgraphics.sty @@ -1,7 +1,7 @@ %% GRAPHICS % % change this info string if making any custom modification -\ProvidesFile{sphinxlatexgraphics.sty}[2021/01/27 graphics] +\ProvidesPackage{sphinxlatexgraphics}[2024/08/13 v8.1.0 graphics] % Provides support for this output mark-up from Sphinx latex writer: % @@ -84,7 +84,8 @@ \ifin@ \setbox\spx@image@box \hbox{\includegraphics - [%#1,% contained only width and/or height and overruled anyhow + [#1,% contains only width and/or height which are overruled next + % but in future may contain page=N hence must be kept width=\spx@image@requiredwidth,height=\spx@image@requiredheight]% {#2}}% % \includegraphics does not set box dimensions to the exactly diff --git a/docs/build/latex/sphinxlatexindbibtoc.sty b/docs/build/latex/sphinxlatexindbibtoc.sty index 79e30a1..052d31e 100644 --- a/docs/build/latex/sphinxlatexindbibtoc.sty +++ b/docs/build/latex/sphinxlatexindbibtoc.sty @@ -1,7 +1,7 @@ %% INDEX, BIBLIOGRAPHY, APPENDIX, TABLE OF CONTENTS % % change this info string if making any custom modification -\ProvidesFile{sphinxlatexindbibtoc.sty}[2021/01/27 index, bib., toc] +\ProvidesPackage{sphinxlatexindbibtoc}[2021/01/27 index, bib., toc] % Provides support for this output mark-up from Sphinx latex writer: % diff --git a/docs/build/latex/sphinxlatexlists.sty b/docs/build/latex/sphinxlatexlists.sty index 8e79355..4db3af2 100644 --- a/docs/build/latex/sphinxlatexlists.sty +++ b/docs/build/latex/sphinxlatexlists.sty @@ -1,7 +1,7 @@ %% ALPHANUMERIC LIST ITEMS % % change this info string if making any custom modification -\ProvidesFile{sphinxlatexlists.sty}[2021/12/20 lists] +\ProvidesPackage{sphinxlatexlists}[2021/12/20 lists] % Provides support for this output mark-up from Sphinx latex writer: % - \sphinxsetlistlabels diff --git a/docs/build/latex/sphinxlatexliterals.sty b/docs/build/latex/sphinxlatexliterals.sty index 3a73a76..11991d9 100644 --- a/docs/build/latex/sphinxlatexliterals.sty +++ b/docs/build/latex/sphinxlatexliterals.sty @@ -1,7 +1,7 @@ %% LITERAL BLOCKS % % change this info string if making any custom modification -\ProvidesFile{sphinxlatexliterals.sty}[2023/04/01 code-blocks and parsed literals] +\ProvidesPackage{sphinxlatexliterals}[2024/07/01 v7.4.0 code-blocks and parsed literals] % Provides support for this output mark-up from Sphinx latex writer: % @@ -34,6 +34,7 @@ % - needspace % - sphinxpackageboxes \RequirePackage{sphinxpackageboxes} +% 7.4.0 removes unneeded usage of \spx@boxes@border % also in sphinxlatexadmonitions.sty: % This is a workaround to a "feature" of French lists, when literal block @@ -224,7 +225,6 @@ \spx@boxes@border@right\z@ \spx@boxes@border@bottom\z@ \spx@boxes@border@left\z@ - \spx@boxes@border\z@ % MEMO: rounded corners still make sense in presence of a background % color, so we do not force the fcolorbox@rectangle here \fi @@ -512,6 +512,9 @@ \setbox\spx@tempboxa \vtop{\raggedright\hyphenpenalty\z@\exhyphenpenalty\z@ \doublehyphendemerits\z@\finalhyphendemerits\z@ +% Avoid TeX reporting Overfull \hbox'es during this measuring phase. Setting +% \hbadness to \@M to avoid Underfull reports is unneeded due to \raggedright. + \hfuzz\maxdimen \spx@everypar{}\noindent\strut\FV@Line\strut\spx@par \spx@verb@getwidths}% \ifdim\spx@verb@maxwidth> @@ -670,25 +673,18 @@ \def\sphinxVerbatim@Before {\sphinxVerbatim@Title\nointerlineskip \kern\dimexpr-\dp\strutbox+\sphinxbelowcaptionspace - % if no frame (code-blocks inside table cells), remove - % the top padding (better visually) - \ifspx@opt@verbatimwithframe\else - % but we must now check if there is a background color - % MEMO: "fcolorbox@setup" will have been done by time of use - \ifspx@boxes@withbackgroundcolor\else-\spx@boxes@padding@top\fi - \fi + % MEMO: prior to 7.4.0 a test was done for presence or + % not of a frame and if not top padding was removed if + % no background color. A background color is now always + % assumed, so this got removed. % caption package adds \abovecaptionskip vspace, remove it - \spx@ifcaptionpackage{-\abovecaptionskip}{}\relax}% + \spx@ifcaptionpackage{-\abovecaptionskip}{}\relax}% \else \vskip\sphinxverbatimsmallskipamount \def\sphinxVerbatim@After {\nointerlineskip\kern\dimexpr\dp\strutbox - \ifspx@opt@verbatimwithframe\else - % but we must now check if there is a background color - % MEMO: "fcolorbox@setup" will have been done by time of use - \ifspx@boxes@withbackgroundcolor\else-\spx@boxes@padding@bottom\fi - \fi - \spx@ifcaptionpackage{-\abovecaptionskip}{}\relax + % MEMO: 7.4.0 removes here too an optional removal of bottom padding + \spx@ifcaptionpackage{-\abovecaptionskip}{}\relax \sphinxVerbatim@Title}% \fi \def\@captype{literalblock}% diff --git a/docs/build/latex/sphinxlatexnumfig.sty b/docs/build/latex/sphinxlatexnumfig.sty index 6d72961..22fcbb0 100644 --- a/docs/build/latex/sphinxlatexnumfig.sty +++ b/docs/build/latex/sphinxlatexnumfig.sty @@ -1,7 +1,7 @@ %% NUMBERING OF FIGURES, TABLES, AND LITERAL BLOCKS % % change this info string if making any custom modification -\ProvidesFile{sphinxlatexnumfig.sty}[2021/01/27 numbering] +\ProvidesPackage{sphinxlatexnumfig}[2024/07/31 v8.1.0 numbering] % Requires: remreset (old LaTeX only) % relates to numfig and numfig_secnum_depth configuration variables @@ -37,7 +37,11 @@ \def\theequation{\arabic{equation}}% \fi \else -\let\spx@preAthefigure\@empty +% See apologetic comments on TeX wizardry at bottom of file. +% The reason for this one is to catch case where there will be only +% the number with no prefix from enclosing sectioning (can happen +% with latex_toplevel_sectioning='part'). +\def\spx@preAthefigure{\expandafter\spx@magicsep@s\romannumeral-`0} \let\spx@preBthefigure\@empty % \ifspx@opt@usespart % <-- LaTeX writer could pass such a 'usespart' boolean % % as sphinx.sty package option @@ -51,7 +55,7 @@ \ifnum\spx@opt@numfigreset>0 \ltx@ifundefined{c@chapter} {} - {\g@addto@macro\spx@preAthefigure{\ifnum\c@chapter>\z@\arabic{chapter}.}% + {\g@addto@macro\spx@preAthefigure{\ifnum\c@chapter>\z@\arabic{chapter}\spx@magicsep}% \g@addto@macro\spx@preBthefigure{\fi}}% \fi \ifnum\spx@opt@numfigreset>1 @@ -61,7 +65,7 @@ \ifspx@opt@mathnumfig \@addtoreset{equation}{section}% \fi% - \g@addto@macro\spx@preAthefigure{\ifnum\c@section>\z@\arabic{section}.}% + \g@addto@macro\spx@preAthefigure{\ifnum\c@section>\z@\arabic{section}\spx@magicsep}% \g@addto@macro\spx@preBthefigure{\fi}% \fi \ifnum\spx@opt@numfigreset>2 @@ -71,7 +75,7 @@ \ifspx@opt@mathnumfig \@addtoreset{equation}{subsection}% \fi% - \g@addto@macro\spx@preAthefigure{\ifnum\c@subsection>\z@\arabic{subsection}.}% + \g@addto@macro\spx@preAthefigure{\ifnum\c@subsection>\z@\arabic{subsection}\spx@magicsep}% \g@addto@macro\spx@preBthefigure{\fi}% \fi \ifnum\spx@opt@numfigreset>3 @@ -81,7 +85,7 @@ \ifspx@opt@mathnumfig \@addtoreset{equation}{subsubsection}% \fi% - \g@addto@macro\spx@preAthefigure{\ifnum\c@subsubsection>\z@\arabic{subsubsection}.}% + \g@addto@macro\spx@preAthefigure{\ifnum\c@subsubsection>\z@\arabic{subsubsection}\spx@magicsep}% \g@addto@macro\spx@preBthefigure{\fi}% \fi \ifnum\spx@opt@numfigreset>4 @@ -91,7 +95,7 @@ \ifspx@opt@mathnumfig \@addtoreset{equation}{paragraph}% \fi% - \g@addto@macro\spx@preAthefigure{\ifnum\c@subparagraph>\z@\arabic{subparagraph}.}% + \g@addto@macro\spx@preAthefigure{\ifnum\c@subparagraph>\z@\arabic{subparagraph}\spx@magicsep}% \g@addto@macro\spx@preBthefigure{\fi}% \fi \ifnum\spx@opt@numfigreset>5 @@ -101,7 +105,7 @@ \ifspx@opt@mathnumfig \@addtoreset{equation}{subparagraph}% \fi% - \g@addto@macro\spx@preAthefigure{\ifnum\c@subsubparagraph>\z@\arabic{subsubparagraph}.}% + \g@addto@macro\spx@preAthefigure{\ifnum\c@subsubparagraph>\z@\arabic{subsubparagraph}\spx@magicsep}% \g@addto@macro\spx@preBthefigure{\fi}% \fi \expandafter\g@addto@macro @@ -114,9 +118,18 @@ \g@addto@macro\theliteralblock{\arabic{literalblock}}% \ifspx@opt@mathnumfig \let\theequation\spx@preAthefigure - \g@addto@macro\theequation{\arabic{equation}}% + \g@addto@macro\theequation{E}% \fi \fi }% end of big \AtBeginDocument +% Sorry for TeX wizardry here. We need to keep expandability. Explaining +% the mechanism is not really feasible to non TeX-experts, but the idea +% is to force next `\ifnum` conditional so we can check what comes next. +% All cases are accounted for (i.e. not an equation, or an equation at top +% level, or an equation in some section at some depth). +\def\spx@magicsep{\expandafter\spx@magicsep@i\romannumeral-`0} +\def\spx@magicsep@i#1{\if#1E\spx@opt@mathnumsep\arabic{equation}\else.#1\fi} +% +\def\spx@magicsep@s#1{\if#1E\arabic{equation}\else#1\fi} \endinput diff --git a/docs/build/latex/sphinxlatexobjects.sty b/docs/build/latex/sphinxlatexobjects.sty index 5d9b69b..1147a01 100644 --- a/docs/build/latex/sphinxlatexobjects.sty +++ b/docs/build/latex/sphinxlatexobjects.sty @@ -1,7 +1,7 @@ %% MODULE RELEASE DATA AND OBJECT DESCRIPTIONS % % change this info string if making any custom modification -\ProvidesFile{sphinxlatexobjects.sty}[2023/07/23 documentation environments] +\ProvidesPackage{sphinxlatexobjects}[2025/02/11 documentation environments] % Provides support for this output mark-up from Sphinx latex writer: % @@ -279,18 +279,37 @@ \newcommand{\pysigstopmultiline}{\sphinxsigismultilinefalse\itemsep\sphinxsignaturesep}% % Production lists +% This simply outputs the lines as is, in monospace font. Refers #13326. +% (the left padding for multi-line alignment is from the nodes themselves, +% and latex is configured below to obey such horizontal whitespace). +% +% - The legacy code used longtable and hardcoded the separator as ::= +% via dedicated macros defined by the environment itself. +% - Here the separator is part of the node. Any extra LaTeX mark-up would +% have to originate from the writer itself to decorate it. +% - The legacy code used strangely \parindent and \indent. Possibly +% (unchecked) due to an earlier tabular usage, but a longtable does not +% work in paragraph mode, so \parindent was without effect and +% \indent only caused some extra blank line above display. +% - The table had some whitespace on its left, which we imitate here via +% \parindent usage (which works in our context...). % \newenvironment{productionlist}{% -% \def\sphinxoptional##1{{\Large[}##1{\Large]}} - \def\production##1##2{\\\sphinxcode{\sphinxupquote{##1}}&::=&\sphinxcode{\sphinxupquote{##2}}}% - \def\productioncont##1{\\& &\sphinxcode{\sphinxupquote{##1}}}% - \parindent=2em - \indent - \setlength{\LTpre}{0pt}% - \setlength{\LTpost}{0pt}% - \begin{longtable}[l]{lcl} + \bigskip % imitate close enough legacy vertical whitespace, which was + % visibly excessive + \ttfamily % needed for space tokens to have same width as letters + \parindent1em % width of a "quad", font-dependent, usually circa width of 2 + % letters + \obeylines % line in = line out + \parskip\z@skip % prevent the parskip vertical whitespace between lines, + % which are technically to LaTeX now each its own paragraph + \@vobeyspaces % obey whitespace + % now a technicality to, only locally to this environment, prevent the + % suppression of indentation of first line, if it comes right after + % \section. Cf package indentfirst from which the code is borrowed. + \let\@afterindentfalse\@afterindenttrue\@afterindenttrue }{% - \end{longtable} + \par % does not hurt... } % Definition lists; requested by AMK for HOWTO documents. Probably useful diff --git a/docs/build/latex/sphinxlatexshadowbox.sty b/docs/build/latex/sphinxlatexshadowbox.sty index a2a1a0e..53a3338 100644 --- a/docs/build/latex/sphinxlatexshadowbox.sty +++ b/docs/build/latex/sphinxlatexshadowbox.sty @@ -1,21 +1,37 @@ %% TOPIC AND CONTENTS BOXES % % change this info string if making any custom modification -\ProvidesFile{sphinxlatexshadowbox.sty}[2023/03/19 sphinxShadowBox] +\ProvidesPackage{sphinxlatexshadowbox}[2024/07/28 v8.1.0 sphinxShadowBox] % Provides support for this output mark-up from Sphinx latex writer: % -% - sphinxShadowBox (environment) +% - Environments: sphinxtopic, sphinxcontents, and sphinxsidebar. +% +% These wrappers replace at 8.1.0 former direct use of sphinxShadowBox +% environment which did not allow separate styling. +% +% - Commands: \sphinxstyletopictitle, \sphinxstylecontentstitle, and +% \sphinxstylesidebartitle. +% +% At 8.1.0 they default to use \sphinxdotitlerow whose definiion is done in +% sphinxlatexadmonitions.sty. There is also \sphinxstylesidebarsubtitle +% which does not use \sphinxdotitlerow. % % Dependencies (they do not need to be defined at time of loading): % % - of course the various colour and dimension options handled via sphinx.sty % - dimension register \spx@image@maxheight from sphinxlatexgraphics.sty -% - \savenotes/\spewnotes from sphinxpackagefootnote +% - \savenotes/\spewnotes from sphinxpackagefootnote.sty % - \ifspx@inframed defined in sphinx.sty +% - \sphinxdotitlerow from sphinxlatexadmonitions.sty +% - \spx@boxes@fcolorbox@setup from sphinxpackageboxes.sty % -% Requires: \RequirePackage{framed} +% Those are required either before or after by sphinx.sty anyhow, but for +% clarity we list them here: +\RequirePackage{sphinxlatexgraphics} +\RequirePackage{sphinxpackagefootnote} +\RequirePackage{sphinxlatexadmonitions} \RequirePackage{sphinxpackageboxes} % At 5.1.0 the code formerly here in a definition of \spx@ShadowFBox has been @@ -45,9 +61,28 @@ % in contrast with the framing used for literal blocks, also based, but in a % more sophisticated way on usage of \MakeFramed/\endMakeFramed, and % adjusting to current text indentation. -\newenvironment{sphinxShadowBox} +% +% At 8.1.0, sphinxShadowBox takes an optional argument #1 and uses it as +% \spx@boxes@fcolorbox@setup{#1} rather than \spx@boxes@fcolorbox@setup{topic}. +% Some hesitation whether to move this line to newly added sphinxtopic, +% sphinxcontents and sphinxsidebar environmments. But anyhow the environment +% also requires later knowing a few more things: sphinxTextColor and +% spx@@texextras. +% +% The #1 defaulting to topic must be such that all parameters expected by +% \spx@boxes@fcolorbox@setup actually do exist, see CSS options in sphinx.sty +% which is what defines them for contents, topic, and sidebar. +% +% Fortunately the #1 is not needed in \end{sphinxShadowBox} so we don't have +% to work around a LaTeX conception bug that such #1 can not be used as is in +% the definition of the \end part of an environment. +% +% MEMO: the "shadow" is not really drawn directly by this environment but +% indirectly via the configuration which is passed over to \spx@boxes@fcolorbox, +% which is the macro creating frame and (perhaps but not necessarily) a shadow. +\newenvironment{sphinxShadowBox}[1][topic]% {% - \spx@boxes@fcolorbox@setup{topic}% + \spx@boxes@fcolorbox@setup{#1}% % we will use the dimen registers from sphinxpackageboxes.sty which now hold % the values from options related to topic/contents % MEMO: \spx@boxes@fcolorbox creates an \hbox but does not quit vertical @@ -56,7 +91,7 @@ \def\FrameCommand {\spx@boxes@fcolorbox}% % 6.2.0 adds support for div.topic_box-decoration-break=slice. % (it is yet undecided if slice style should inhibit a bottom shadow) - \ifspx@topic@border@open + \@nameuse{ifspx@#1@border@open}% \def\FirstFrameCommand {\spx@boxes@fcolorbox@setup@openbottom\FrameCommand}% \def\MidFrameCommand @@ -97,10 +132,10 @@ \@setminipage }% \color@begingroup % workaround upstream framed.sty bug - \ifspx@topic@withtextcolor - \color{sphinxtopicTextColor}% + \@nameuse{ifspx@#1@withtextcolor}% + \color{sphinx#1TextColor}% \fi - \spx@topic@TeXextras + \@nameuse{spx@#1@TeXextras}% }% {% insert the "endminipage" code \par\unskip @@ -113,4 +148,31 @@ \spewnotes } +% 8.1.0 +\newenvironment{sphinxtopic} + {\begin{sphinxShadowBox}[topic]}{\end{sphinxShadowBox}} +\newenvironment{sphinxcontents} + {\begin{sphinxShadowBox}[contents]}{\end{sphinxShadowBox}} +% Arguably sphinxsidebar should rather use a wrapfig or similar environment +% but this is so dysfunctional in LaTeX (except for self-written documents) +% so we prefer to not venture into such a potential quagmire and keep the +% legacy rendering using a full width display. +\newenvironment{sphinxsidebar} + {\begin{sphinxShadowBox}[sidebar]}{\end{sphinxShadowBox}} + +% TODO: decide if this should be in sphinxlatexstyletext.sty rather +% +% 8.1.0 styles topic/contents/sidebar with a title row, too. +% Prior to 8.1.0, definitions use \protected\def but there does not seem +% to be any reason so back to \newcommand. +\newcommand*\sphinxstyletopictitle[1]{\sphinxdotitlerow{topic}{#1}} +\newcommand*\sphinxstylecontentstitle[1]{\sphinxdotitlerow{contents}{#1}} +\newcommand*\sphinxstylesidebartitle[1]{\sphinxdotitlerow{sidebar}{#1}} +% No default color background for subtitle. The contents next are injected by +% LaTeX writer after a blank line in source hence will start a new paragrpah. +% The \sphinxAtStartPar here is only for coherence with other text paragraphs, +% but does not have serious necessity (its general role is to allow hyphenation +% for first word in narrow table cells). +\newcommand*\sphinxstylesidebarsubtitle[1]{\sphinxAtStartPar\textbf{#1}} + \endinput diff --git a/docs/build/latex/sphinxlatexstyleheadings.sty b/docs/build/latex/sphinxlatexstyleheadings.sty index b5e9c85..08773c0 100644 --- a/docs/build/latex/sphinxlatexstyleheadings.sty +++ b/docs/build/latex/sphinxlatexstyleheadings.sty @@ -1,9 +1,15 @@ %% TITLES % % change this info string if making any custom modification -\ProvidesFile{sphinxlatexstyleheadings.sty}[2023/02/11 headings] +\ProvidesPackage{sphinxlatexstyleheadings}[2023/02/11 headings] \RequirePackage[nobottomtitles*]{titlesec} +% tests showed that this setting guarantees \section title has +% 3 lines of text following it on same page if near bottom. +\renewcommand\bottomtitlespace{6\baselineskip} +% the default setting of 0.2\textheight is about 11\baselineskip +% (for 10pt letterpaper documents) and may create large voids. + \@ifpackagelater{titlesec}{2016/03/15}% {\@ifpackagelater{titlesec}{2016/03/21}% {}% @@ -47,7 +53,6 @@ \titleformat{\subparagraph}{\normalsize\py@HeaderFamily}% {\py@TitleColor\thesubparagraph}{0.5em}{\py@TitleColor} - % Since Sphinx 1.5, users should use HeaderFamily key to 'sphinxsetup' rather % than defining their own \py@HeaderFamily command (which is still possible). % Memo: \py@HeaderFamily is also used by \maketitle as defined in diff --git a/docs/build/latex/sphinxlatexstylepage.sty b/docs/build/latex/sphinxlatexstylepage.sty index 4066129..53f9e48 100644 --- a/docs/build/latex/sphinxlatexstylepage.sty +++ b/docs/build/latex/sphinxlatexstylepage.sty @@ -1,16 +1,10 @@ %% PAGE STYLING % % change this info string if making any custom modification -\ProvidesFile{sphinxlatexstylepage.sty}[2021/01/27 page styling] +\ProvidesPackage{sphinxlatexstylepage}[2021/01/27 page styling] % Separate paragraphs by space by default. -\IfFileExists{parskip-2001-04-09.sty}% since September 2018 TeXLive update -% new parskip.sty, but let it rollback to old one. -% hopefully TeX installation not broken and LaTeX kernel not too old - {\RequirePackage{parskip}[=v1]} -% standard one from 1989. Admittedly \section of article/book gives possibly -% anomalous spacing, but we can't require September 2018 release for some time. - {\RequirePackage{parskip}} +\RequirePackage{parskip} % Style parameters and macros used by most documents here \raggedbottom diff --git a/docs/build/latex/sphinxlatexstyletext.sty b/docs/build/latex/sphinxlatexstyletext.sty index d900090..d083cd9 100644 --- a/docs/build/latex/sphinxlatexstyletext.sty +++ b/docs/build/latex/sphinxlatexstyletext.sty @@ -1,45 +1,12 @@ %% TEXT STYLING % % change this info string if making any custom modification -\ProvidesFile{sphinxlatexstyletext.sty}[2023/07/23 text styling] +\ProvidesPackage{sphinxlatexstyletext}[2024/07/28 v8.1.0 text styling] -% Basically everything here consists of macros which are part of the latex -% markup produced by the Sphinx latex writer - -% But those arise rather from the default definitions of the respective -% latex environments done in sphinxlatexadmonitions.sty -\def\sphinxstylenotetitle #1{\sphinxstrong{#1} } -\let\sphinxstylehinttitle \sphinxstylenotetitle % #1 holds the localized notice name -\let\sphinxstyleimportanttitle\sphinxstylenotetitle % followed by a colon -\let\sphinxstyletiptitle \sphinxstylenotetitle -\let\sphinxstylewarningtitle \sphinxstylenotetitle -\let\sphinxstylecautiontitle \sphinxstylenotetitle -\let\sphinxstyleattentiontitle\sphinxstylenotetitle -\let\sphinxstyledangertitle \sphinxstylenotetitle -\let\sphinxstyleerrortitle \sphinxstylenotetitle -\def\sphinxstyleseealsotitle#1{\sphinxstrong{#1}\par\nopagebreak} -% -% A utility to remove a final colon. Removing last token is not easy in -% LaTeX, and there are additional complications: -% - some languages will make the : "active" in document body, -% - the generic admonition ends up using "note", so for \sphinxnotetitle to -% use it safely, the utility has to allow an input not having any final colon. -% - a bit far-fetched but maybe there is more than one colon inside the input -% (possible from a generic admonition title). -% Hence the scary code. -\def\sphinxremovefinalcolon#1{% #1 is the "active" : TeX token -\protected\def\sphinxremovefinalcolon ##1{% - % complications due to : possibly "active" - \begingroup\ifnum\catcode`:=\active - \def\x####1#1\relax{####1}% - \else\def\x####1:\relax{####1}\fi - \expandafter\endgroup\x##1\relax - % trick to let \x work also if input ##1 has no ending colon - \@gobblefour#1\relax:\relax\relax\relax - }% -}% end of wrapper to inject active : -\begingroup\catcode`:\active\expandafter\endgroup\sphinxremovefinalcolon: -% See doc/latex.rst for an example. +% 7.4.0 has moved all that is related to admonitions to sphinxlatexadmonitions.sty +% 8.1.0 has moved topic/contents/sidebar to sphinxlatexshadowbox.sty +% Most everything left here consists of macros which are part of the latex markup +% produced by the Sphinx LaTeX writer. % Some custom font markup commands. \protected\def\sphinxstrong#1{\textbf{#1}} @@ -73,10 +40,7 @@ {{\Large\sffamily#1}\nopagebreak\vspace{1mm}} \def\sphinxstyleindexlettergroupDefault #1% {{\Large\sffamily\sphinxnonalphabeticalgroupname}\nopagebreak\vspace{1mm}} -\protected\def\sphinxstyletopictitle #1{\textbf{#1}\par\medskip} -\let\sphinxstylesidebartitle\sphinxstyletopictitle \protected\def\sphinxstyleothertitle #1{\textbf{#1}} -\protected\def\sphinxstylesidebarsubtitle #1{~\\\textbf{#1} \smallskip} % \text.. commands do not allow multiple paragraphs % attention, this one is not self-delimiting \protected\def\sphinxstyletheadfamily {\sffamily} diff --git a/docs/build/latex/sphinxlatextables.sty b/docs/build/latex/sphinxlatextables.sty index 9e44532..4114955 100644 --- a/docs/build/latex/sphinxlatextables.sty +++ b/docs/build/latex/sphinxlatextables.sty @@ -1,7 +1,7 @@ %% TABLES (WITH SUPPORT FOR MERGED CELLS OF GENERAL CONTENTS) % % change this info string if making any custom modification -\ProvidesFile{sphinxlatextables.sty}[2022/08/15 tables]% +\ProvidesPackage{sphinxlatextables}[2024/07/01 v7.4.0 tables]% % Provides support for this output mark-up from Sphinx latex writer % and table templates: @@ -42,6 +42,11 @@ % - \sphinxthistablewithnocolorrowsstyle % - \sphinxthistablewithvlinesstyle % - \sphinxthistablewithnovlinesstyle +% +% Also provides user command (see docs) +% - \sphixncolorblend +% (Sphinx 7.4.0 now requires xcolor, so \sphinxcolorblend does not check +% its availability anymore) % % Executes \RequirePackage for: % @@ -103,6 +108,7 @@ \vbox{}% get correct baseline from above \LTpre\z@skip\LTpost\z@skip % set to zero longtable's own skips \edef\sphinxbaselineskip{\dimexpr\the\dimexpr\baselineskip\relax\relax}% + \spx@inframedtrue % message to sphinxheavybox }% % Compatibility with caption package \def\sphinxthelongtablecaptionisattop{% @@ -116,7 +122,9 @@ \def\sphinxatlongtableend{\@nobreakfalse % latex3/latex2e#173 \prevdepth\z@\vskip\sphinxtablepost\relax}% % B. Table with tabular or tabulary -\def\sphinxattablestart{\par\vskip\dimexpr\sphinxtablepre\relax}% +\def\sphinxattablestart{\par\vskip\dimexpr\sphinxtablepre\relax + \spx@inframedtrue % message to sphinxheavybox + }% \let\sphinxattableend\sphinxatlongtableend % This is used by tabular and tabulary templates \newcommand*\sphinxcapstartof[1]{% @@ -513,19 +521,6 @@ \fi } \def\sphinxcolorblend#1{\gdef\spx@colorblendparam{{#1}}\spx@table@hackCT@colorblend} -% Either xcolor.sty exists on user system and has been loaded by sphinx.sty, -% or it does not exist, so we can use \@ifpackageloaded without delaying. -\@ifpackageloaded{xcolor}% - {}% - {\def\sphinxcolorblend#1{% -\PackageWarning{sphinx}{This table uses \string\sphinxcolorblend\space - but xcolor is not in\MessageBreak - the TeX/LaTeX installation, the command will be\MessageBreak - ignored in this and the next tables}% - \global\let\sphinxcolorblend\@gobble - \sphinxbuildwarning{colorblend}% - }% - } %%%%%%%%%%%%%%%%%% @@ -564,7 +559,7 @@ % 99% or use case. Or perhaps some trick with storing in a \vbox and recovering % via some \vsplit but this becomes complicated... perhaps in future. % -% In passing we obtain baseline alignements across rows (only if +% In passing we obtain baseline alignments across rows (only if % \arraystretch is 1, as LaTeX's does not obey \arraystretch in "p" % multi-line contents, only first and last line...) % diff --git a/docs/build/latex/sphinxoptionsgeometry.sty b/docs/build/latex/sphinxoptionsgeometry.sty index af5a804..d0c59f0 100644 --- a/docs/build/latex/sphinxoptionsgeometry.sty +++ b/docs/build/latex/sphinxoptionsgeometry.sty @@ -1,7 +1,7 @@ %% OPTIONS FOR GEOMETRY % % change this info string if making any custom modification -\ProvidesFile{sphinxoptionsgeometry.sty}[2021/01/27 geometry] +\ProvidesPackage{sphinxoptionsgeometry}[2021/01/27 geometry] % geometry \ifx\kanjiskip\@undefined diff --git a/docs/build/latex/sphinxoptionshyperref.sty b/docs/build/latex/sphinxoptionshyperref.sty index b88f108..caf28e8 100644 --- a/docs/build/latex/sphinxoptionshyperref.sty +++ b/docs/build/latex/sphinxoptionshyperref.sty @@ -1,7 +1,7 @@ %% Bookmarks and hyperlinks % % change this info string if making any custom modification -\ProvidesFile{sphinxoptionshyperref.sty}[2021/01/27 hyperref] +\ProvidesPackage{sphinxoptionshyperref}[2021/01/27 hyperref] % to make pdf with correct encoded bookmarks in Japanese % this should precede the hyperref package diff --git a/docs/build/latex/sphinxpackageboxes.sty b/docs/build/latex/sphinxpackageboxes.sty index b0d3707..2345051 100644 --- a/docs/build/latex/sphinxpackageboxes.sty +++ b/docs/build/latex/sphinxpackageboxes.sty @@ -1,7 +1,12 @@ %% COLOURED BOXES % % change this info string if making any custom modification -\ProvidesPackage{sphinxpackageboxes}[2023/03/19 v6.2.0 advanced colored boxes] +\ProvidesPackage{sphinxpackageboxes}[2024/07/01 v7.4.0 advanced colored boxes] +% 7.4.0 removes usage of some booleans "...withbackgroundcolor" and +% "...withbordercolor" as well as \spx@boxes@border dimen which was +% actually really needed nowhere. This was done in sync with changes in +% sphinx.sty, sphinxlatexadmonitions.sty and sphinxlatexliterals.sty. +% % Optionally executes \RequirePackage for: % % - pict2e. Ideally we would like to use the v0.4a 2020/08/16 release of this @@ -78,15 +83,13 @@ %%%%%%%%%%%%%%%% % Internal registers, conditionals, colors to be configured by each caller % via a preliminary "setup" call -% \newif\ifspx@boxes@withshadow \newif\ifspx@boxes@insetshadow -\newif\ifspx@boxes@withbackgroundcolor +%%% \newif\ifspx@boxes@withbackgroundcolor % removed at 7.4.0 \newif\ifspx@boxes@withshadowcolor -\newif\ifspx@boxes@withbordercolor +%%% \newif\ifspx@boxes@withbordercolor % removed at 7.4.0 \newif\ifspx@boxes@shadowinbbox % -\newdimen\spx@boxes@border \newdimen\spx@boxes@border@top \newdimen\spx@boxes@border@right \newdimen\spx@boxes@border@bottom @@ -150,7 +153,6 @@ \spx@boxes@border@right \dimexpr\@nameuse{spx@#1@border@right}\relax \spx@boxes@border@bottom\dimexpr\@nameuse{spx@#1@border@bottom}\relax \spx@boxes@border@left \dimexpr\@nameuse{spx@#1@border@left}\relax - \spx@boxes@border \dimexpr\@nameuse{spx@#1@border}\relax % \spx@boxes@padding@top \dimexpr\@nameuse{spx@#1@padding@top}\relax \spx@boxes@padding@right \dimexpr\@nameuse{spx@#1@padding@right}\relax @@ -200,19 +202,9 @@ \spx@boxes@insetshadowfalse \fi % - \@nameuse{ifspx@#1@withbordercolor}% - \spx@boxes@withbordercolortrue \sphinxcolorlet{spx@boxes@bordercolor}{sphinx#1BorderColor}% - \else - \spx@boxes@withbordercolorfalse - \fi % - \@nameuse{ifspx@#1@withbackgroundcolor}% - \spx@boxes@withbackgroundcolortrue \sphinxcolorlet{spx@boxes@backgroundcolor}{sphinx#1BgColor}% - \else - \spx@boxes@withbackgroundcolorfalse - \fi % \@nameuse{ifspx@#1@withshadowcolor}% \spx@boxes@withshadowcolortrue @@ -447,14 +439,12 @@ \fi % BACKGROUND % draw background and move back to reference point - \ifspx@boxes@withbackgroundcolor {\color{spx@boxes@backgroundcolor}% \vrule\@height\ht\spx@tempboxa \@depth\dp\spx@tempboxa \@width\wd\spx@tempboxa \kern-\wd\spx@tempboxa }% - \fi % BOX SHADOW % draw shadow and move back to reference point \ifspx@boxes@withshadow @@ -494,13 +484,8 @@ }% end of \vbox \fi % end of shadow drawing, and we are back to horizontal reference point % BOX BORDER - \vbox{\ifspx@boxes@withbordercolor - \color{spx@boxes@bordercolor}% - \else - % 6.2.0: guard against a \color command in contents whose effect - % could leak to border at a pagebreak - \normalcolor - \fi + % 7.4.0 requires a set border color + \vbox{\color{spx@boxes@bordercolor}% \hrule\@height\spx@boxes@border@top \kern-\spx@boxes@border@top \setbox\spx@tempboxb\hb@xt@\wd\spx@tempboxa @@ -540,14 +525,13 @@ \def\spx@boxes@fcolorbox@insetshadow{% % BACKGROUND % draw background and move back to reference point - \ifspx@boxes@withbackgroundcolor + % 7.4.0 always assumes a background color {\color{spx@boxes@backgroundcolor}% \vrule\@height\ht\spx@tempboxa \@depth\dp\spx@tempboxa \@width\wd\spx@tempboxa \kern-\wd\spx@tempboxa }% - \fi % BOX SHADOW % draw shadow and move back to reference point \ifspx@boxes@withshadow @@ -589,13 +573,8 @@ }% end of \hbox, attention its depth is only |yoffset| if yoffset<0 \fi % end of inset shadow drawing, and we are back to horizontal reference point % BOX BORDER - \vbox{\ifspx@boxes@withbordercolor - \color{spx@boxes@bordercolor}% - \else - % 6.2.0: guard against a \color command in contents whose effect - % could leak to border at a pagebreak - \normalcolor - \fi + % 7.4.0 requires a set border color + \vbox{\color{spx@boxes@bordercolor}% \hrule\@height\spx@boxes@border@top \kern-\spx@boxes@border@top \setbox\spx@tempboxb\hb@xt@\wd\spx@tempboxa @@ -807,17 +786,11 @@ \fi \spx@boxes@border@defpath% must be redone after each \fillpath! (even if % was in a \put) - \ifspx@boxes@withbordercolor + % 7.4.0 requires a set border color \color{spx@boxes@bordercolor}% - \else - \normalcolor - \fi \fillpath - \ifspx@boxes@withbackgroundcolor + % and backgroundcolor command \color{spx@boxes@backgroundcolor}% - \else - \color{white}% - \fi \edef\spx@width{\number\dimexpr\spx@width-\spx@boxes@border@left -\spx@boxes@border@right sp}% \edef\spx@height{\number\dimexpr\spx@height-\spx@boxes@border@top diff --git a/docs/build/latex/sphinxpackagefootnote.sty b/docs/build/latex/sphinxpackagefootnote.sty index 5590123..7f2e291 100644 --- a/docs/build/latex/sphinxpackagefootnote.sty +++ b/docs/build/latex/sphinxpackagefootnote.sty @@ -1,6 +1,6 @@ \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{sphinxpackagefootnote}% - [2022/08/15 v5.3.0 Sphinx custom footnotehyper package (Sphinx team)] + [2024/05/17 v7.3.x Sphinx custom footnotehyper package (Sphinx team)] %% %% Package: sphinxpackagefootnote %% Version: based on footnotehyper.sty 2021/02/04 v1.1d @@ -409,9 +409,10 @@ {\gdef\@thefnmark{?}% on first LaTeX run \refstepcounter{sphinxfootnotemark}\label{footnotemark.\thesphinxfootnotemark}% }% - {\sphinx@xdef@thefnmark{#1}% also defines \spx@footrefHref - \def\@makefnmark{% will be used by \H@@footnotemark + {\def\@makefnmark{% will be used by \H@@footnotemark \refstepcounter{sphinxfootnotemark}\label{footnotemark.\thesphinxfootnotemark}% + \sphinx@xdef@thefnmark{#1}% also defines \spx@footrefHref + % must be executed after \refstepcounter \hyper@linkstart{link}{\spx@footrefHref}% \spx@saved@makefnmark \hyper@linkend diff --git a/docs/build/latex/sphinxpackagesubstitutefont.sty b/docs/build/latex/sphinxpackagesubstitutefont.sty new file mode 100644 index 0000000..536bf20 --- /dev/null +++ b/docs/build/latex/sphinxpackagesubstitutefont.sty @@ -0,0 +1,21 @@ +%% a stub for obsoleted LaTeX package substitutefont +% The package substitutefont stopped being distributed with TeXLive +% around August 2023 and was moved to "obsolete" section. +% cf https://ctan.org/pkg/substitutefont +% Trying to load it raises a LaTeX build error since. + +% The \substitutefont has a LaTeX kernel replacement +% \DeclareFontFamilySubstitution +% which was added to LaTeX 2020-02-02 +% The aim of this stub is to do that replacement silently. + +% change this info string if making any custom modification +\ProvidesPackage{sphinxpackagesubstitutefont}[2023/15/11 v7.3.0 substitutefont stub] + +\ifdefined\DeclareFontFamilySubstitution + \def\substitutefont{\DeclareFontFamilySubstitution} +\else + \usepackage{substitutefont} +\fi + +\endinput diff --git a/docs/contributors.rst b/docs/contributors.rst index 48212de..2732936 100644 --- a/docs/contributors.rst +++ b/docs/contributors.rst @@ -3,7 +3,7 @@ Contributors Main author ----------- -* `Lindon Roberts `_ (University of Sydney) +* `Lindon Roberts `_ (University of Melbourne) Contributors ------------ diff --git a/docs/history.rst b/docs/history.rst index fd82d86..114d3d5 100644 --- a/docs/history.rst +++ b/docs/history.rst @@ -84,3 +84,8 @@ Version 1.5.4 (11 Feb 2025) --------------------------- * Bugfix when printing results from a run which terminated early * Add ability to save/load results to/from a dictionary + +Version 1.6 (10 Sep 2025) +------------------------- +* Allow use of evaluation database as :code:`x0` to reduce number of objective evaluations required in initialization phase +* When printing solution object, reduce the maximum length of residual/Jacobian vectors that are fully displayed diff --git a/docs/userguide.rst b/docs/userguide.rst index 0e72ab8..7f4ceac 100644 --- a/docs/userguide.rst +++ b/docs/userguide.rst @@ -33,6 +33,11 @@ The input :code:`objfun` is a Python function which takes an input :math:`x\in\m The input :code:`x0` is the starting point for the solver, and (where possible) should be set to be the best available estimate of the true solution :math:`x_{min}\in\mathbb{R}^n`. It should be specified as a one-dimensional NumPy array (i.e. with :code:`x0.shape == (n,)`). As DFO-LS is a local solver, providing different values for :code:`x0` may cause it to return different solutions, with possibly different objective values. +In newer version of DFO-LS (v1.6 onwards), the input :code:`x0` may instead by an instance of a :code:`dfols.EvaluationDatabase`, which stores a collection +of previously evaluated points and their associated vectors of residuals. One of these points is designated the starting point for the solver, and the other +points may be used by DFO-LS to build its first approximation to :code:`objfun`, reducing the number of evaluations required to begin the main iteration. +See the example below for more details for how to use this functionality. + The output of :code:`dfols.solve` is an object containing: * :code:`soln.x` - an estimate of the solution, :math:`x_{min}\in\mathbb{R}^n`, a one-dimensional NumPy array. @@ -436,6 +441,164 @@ The solution found by DFO-LS is: We can see that 3 of the 5 components of the solution are very close to zero. Note that many LASSO-type algorithms can produce a solution with many entries being exactly zero, but DFO-LS can only make them very small (related to how it calculates a new point with trust-region constraints). +Using Initial Evaluation Database +--------------------------------- +Since DFO-LS v1.6, the input :code:`x0` may instead be an instance of a :code:`dfols.EvaluationDatabase` class containing a collection of previously evaluated +points and their associated vectors of residuals. One of these points must be flagged as the starting point for the solver (otherwise, the most recently added +point is used). DFO-LS will automaticaly select some (but possibly none/all) of the other points to help build its first internal approximation to the objective, +which reduces the number of times the objective must be evaluated during the initialization phase, before the main algorithm can begin. + +For example, suppose we want to use DFO-LS to minimize the Watson test function (Problem 20 from [MGH1981]_). Using the standard starting point, our code looks like + + .. code-block:: python + + import numpy as np + import dfols + + # Define the objective function + def watson(x): + n = len(x) + m = 31 + fvec = np.zeros((m,), dtype=float) + for i in range(1, 30): # i=1,...,29 + div = float(i) / 29.0 + s1 = 0.0 + dx = 1.0 + for j in range(2, n + 1): # j = 2,...,n + s1 = s1 + (j - 1) * dx * x[j - 1] + dx = div * dx + s2 = 0.0 + dx = 1.0 + for j in range(1, n + 1): # j = 1,...,n + s2 = s2 + dx * x[j - 1] + dx = div * dx + fvec[i - 1] = s1 - s2 ** 2 - 1.0 + fvec[29] = x[0] + fvec[30] = x[1] - x[0] ** 2 - 1.0 + return fvec + + # Define the starting point + n = 6 + x0 = 0.5 * np.ones((n,), dtype=float) + + # Show extra output to demonstrate the impact of using an initial evaluation database + import logging + logging.basicConfig(level=logging.INFO, format='%(message)s') + + # Call DFO-LS + soln = dfols.solve(watson, x0) + + # Display output + print(soln) + +In the output of this code, we can check that DFO-LS finds the unique minimizer of this function. We can also see that before the main loop can begin, +DFO-LS needs to evaluate the objective at the given starting point, and 6 extra points (since this problem has 6 variables to be minimized): + + .. code-block:: none + + Function eval 1 at point 1 has obj = 16.4308311759923 at x = [...] + Initialising (coordinate directions) + Function eval 2 at point 2 has obj = 28.9196967094733 at x = [...] + Function eval 3 at point 3 has obj = 22.0866904737059 at x = [...] + Function eval 4 at point 4 has obj = 20.6560889343479 at x = [...] + Function eval 5 at point 5 has obj = 19.2914312375462 at x = [...] + Function eval 6 at point 6 has obj = 18.0373781384725 at x = [...] + Function eval 7 at point 7 has obj = 16.8946356501339 at x = [...] + Beginning main loop + Function eval 8 at point 8 has obj = 8.45207899459595 at x = [...] + Function eval 9 at point 9 has obj = 2.54949692496583 at x = [...] + ... + Function eval 90 at point 90 has obj = 0.00228767005355292 at x = [...] + Did a total of 1 run(s) + + ****** DFO-LS Results ****** + Solution xmin = [-0.01572509 1.01243487 -0.23299162 1.26043004 -1.51372886 0.99299641] + Not showing residual vector because it is too long; check self.resid + Objective value f(xmin) = 0.002287670054 + Needed 90 objective evaluations (at 90 points) + Not showing approximate Jacobian because it is too long; check self.jacobian + Solution xmin was evaluation point 89 + Approximate Jacobian formed using evaluation points [87 85 76 89 86 88 84] + Exit flag = 0 + Success: rho has reached rhoend + **************************** + +Instead of this, we can build a database of points where we have previously evaluated the objective, marking one of them as the starting point +for the algorithm. DFO-LS will then select some/all (but possibly none) of the other points and use them as initial evaluations, allowing it to begin +the main loop faster. In general, DFO-LS will select points that are: + +* Not too close/far from the selected starting point (relative to the initial trust-region radius, input :code:`rhobeg`) +* Not in similar directions (relative to the selected starting point) to other selected initial points. For example, if several points differ from + the selected starting point in only the first variable, at most one of these will be selected. + +The following code demonstrates how an evaluation database may be constructed and given to DFO-LS: + + .. code-block:: python + + # Assuming numpy and dfols already imported, watson function already defined + + # Build a database of evaluations + eval_db = dfols.EvaluationDatabase() + + # Define the starting point and add it to the database + n = 6 + x0 = 0.5 * np.ones((n,), dtype=float) + eval_db.append(x0, watson(x0), make_starting_eval=True) + # make_starting_eval=True --> use this point as the starting point for DFO-LS + + # Add other points to the database + # Note: x0, x1 and x2 are colinear, so at least one of x1 and x2 will not be included in the initial model + x1 = np.ones((n,), dtype=float) + x2 = np.zeros((n,), dtype=float) + x3 = np.arange(n).astype(float) + eval_db.append(x1, watson(x1)) + eval_db.append(x2, watson(x2)) + eval_db.append(x3, watson(x3)) + + # Show extra output to demonstrate the impact of using an initial evaluation database + import logging + logging.basicConfig(level=logging.INFO, format='%(message)s') + + # Call DFO-LS + soln = dfols.solve(watson, x0) + + # Display output + print(soln) + +Running this code, we get the same (correct) answer but using fewer evaluations of the objective in the main call to :code:`dfols.solve()`. +The logging information reveals that :code:`x0` was used as the starting point, and :code:`x1` and :code:`x3` were used to build the initial model. +This means that only 4 evaluations of the objective were required in the initialization phase. + + .. code-block:: none + + Using pre-existing evaluation 0 as starting point + Adding pre-existing evaluation 1 to initial model + Adding pre-existing evaluation 3 to initial model + Function eval 1 at point 1 has obj = 15.1910664616598 at x = [...] + Function eval 2 at point 2 has obj = 15.2288491702299 at x = [...] + Function eval 3 at point 3 has obj = 15.228054997542 at x = [...] + Function eval 4 at point 4 has obj = 15.3011037277481 at x = [...] + Beginning main loop + Function eval 5 at point 5 has obj = 13.5524099633802 at x = [...] + Function eval 6 at point 6 has obj = 7.33371957636104 at x = [...] + ... + Function eval 81 at point 81 has obj = 0.00228767005355266 at x = [...] + Did a total of 1 run(s) + + ****** DFO-LS Results ****** + Solution xmin = [-0.01572509 1.01243487 -0.23299163 1.26043009 -1.51372893 0.99299643] + Not showing residual vector because it is too long; check self.resid + Objective value f(xmin) = 0.002287670054 + Needed 81 objective evaluations (at 81 points) + Not showing approximate Jacobian because it is too long; check self.jacobian + Solution xmin was evaluation point 77 + Approximate Jacobian formed using evaluation points [76 73 79 74 77 75 80] + Exit flag = 0 + Success: rho has reached rhoend + **************************** + +Note that the indices of the evaluation database mentioned in the log refer to the order in which the points were added to the evaluation database. + Example: Noisy Objective Evaluation ----------------------------------- As described in :doc:`info`, derivative-free algorithms such as DFO-LS are particularly useful when :code:`objfun` has noise. Let's modify the previous example to include random noise in our objective evaluation, and compare it to SciPy's derivative-based solver (the below results came from using SciPy v1.13.0): @@ -708,3 +871,6 @@ References .. [B2017] Amir Beck, `First-Order Methods in Optimization `_, SIAM (2017). + +.. [MGH1981] + Jorge J. More, Burton S. Garbow and Kenneth E. Hillstrom, `Testing Unconstrained Optimization Software `_, *ACM Transactions on Mathematical Software*, 7:1 (1981), pp. 17-41. diff --git a/examples/existing_evaluations.py b/examples/existing_evaluations.py new file mode 100644 index 0000000..183d7f8 --- /dev/null +++ b/examples/existing_evaluations.py @@ -0,0 +1,66 @@ +""" +Demonstration of using database of existing evaluations to speed up DFO-LS + +Test problem is the 'Watson function': for details, see +J. J. More, B. S. Garbow, K. E. Hillstrom. Testing Unconstrained Optimization Software. +ACM Transactions on Mathematical Software, 7:1 (1981), pp. 17-41. +""" +import numpy as np +import dfols + +# Define the objective function +def watson(x): + n = len(x) + m = 31 + fvec = np.zeros((m,), dtype=float) + for i in range(1, 30): # i=1,...,29 + div = float(i) / 29.0 + s1 = 0.0 + dx = 1.0 + for j in range(2, n + 1): # j = 2,...,n + s1 = s1 + (j - 1) * dx * x[j - 1] + dx = div * dx + s2 = 0.0 + dx = 1.0 + for j in range(1, n + 1): # j = 1,...,n + s2 = s2 + dx * x[j - 1] + dx = div * dx + fvec[i - 1] = s1 - s2 ** 2 - 1.0 + fvec[29] = x[0] + fvec[30] = x[1] - x[0] ** 2 - 1.0 + return fvec + +# Define the starting point +n = 6 +x0 = 0.5 * np.ones((n,), dtype=float) + +# Show extra output to demonstrate the impact of using an initial evaluation database +import logging +logging.basicConfig(level=logging.INFO, format='%(message)s') + +# Call DFO-LS +soln = dfols.solve(watson, x0) + +# Display output +print(soln) + +# Build a database of evaluations +eval_db = dfols.EvaluationDatabase() + +# Define the starting point and add it to the database +eval_db.append(x0, watson(x0), make_starting_eval=True) +# make_starting_eval=True --> use this point as the starting point for DFO-LS + +# Add other points to the database +# Note: x0, x1 and x2 are colinear, so at least one of x1 and x2 will not be included in the initial model +x1 = np.ones((n,), dtype=float) +x2 = np.zeros((n,), dtype=float) +x3 = np.arange(n).astype(float) +eval_db.append(x1, watson(x1)) +eval_db.append(x2, watson(x2)) +eval_db.append(x3, watson(x3)) + +# Alternative run: initialize using evaluation database +# Turn on logging above to see which database points are selected to reduce the initialization cost +soln = dfols.solve(watson, eval_db) # replace x0 with eval_db +print(soln) \ No newline at end of file diff --git a/manual.pdf b/manual.pdf index 1b0a0ba..89b3d4e 100755 Binary files a/manual.pdf and b/manual.pdf differ