Make Verbose Option a Hidden API

This commit is contained in:
Pat Newell
2020-08-01 06:59:02 -04:00
parent 38a61643e2
commit 19320d229b
15 changed files with 76 additions and 72 deletions

View File

@@ -47,6 +47,7 @@ class BaseOptimizer:
self.tickers = tickers
# Outputs
self.weights = None
self.verbose = False
def _make_output_weights(self, weights=None):
"""
@@ -201,22 +202,20 @@ class BaseConvexOptimizer(BaseOptimizer):
self._constraints.append(self._w >= self._lower_bounds)
self._constraints.append(self._w <= self._upper_bounds)
def _solve_cvxpy_opt_problem(self, verbose=False):
def _solve_cvxpy_opt_problem(self):
"""
Helper method to solve the cvxpy problem and check output,
once objectives and constraints have been defined
:param verbose: whether performance should be printed, defaults to False
:type verbose: bool, optional
:raises exceptions.OptimizationError: if problem is not solvable by cvxpy
"""
try:
opt = cp.Problem(cp.Minimize(self._objective), self._constraints)
if self.solver is not None:
opt.solve(solver=self.solver, verbose=verbose)
opt.solve(solver=self.solver, verbose=self.verbose)
else:
opt.solve(verbose=verbose)
opt.solve(verbose=self.verbose)
except (TypeError, cp.DCPError):
raise exceptions.OptimizationError
@@ -299,7 +298,7 @@ class BaseConvexOptimizer(BaseOptimizer):
is_sector = [sector_mapper[t] == sector for t in self.tickers]
self._constraints.append(cp.sum(self._w[is_sector]) >= sector_lower[sector])
def convex_objective(self, custom_objective, weights_sum_to_one=True, verbose=False, **kwargs):
def convex_objective(self, custom_objective, weights_sum_to_one=True, **kwargs):
"""
Optimise a custom convex objective function. Constraints should be added with
``ef.add_constraint()``. Optimiser arguments must be passed as keyword-args. Example::
@@ -316,8 +315,6 @@ class BaseConvexOptimizer(BaseOptimizer):
:type custom_objective: function with signature (cp.Variable, `**kwargs`) -> cp.Expression
:param weights_sum_to_one: whether to add the default objective, defaults to True
:type weights_sum_to_one: bool, optional
:param verbose: whether performance should be printed, defaults to False
:type verbose: bool, optional
:raises OptimizationError: if the objective is nonconvex or constraints nonlinear.
:return: asset weights for the efficient risk portfolio
:rtype: OrderedDict
@@ -331,7 +328,7 @@ class BaseConvexOptimizer(BaseOptimizer):
if weights_sum_to_one:
self._constraints.append(cp.sum(self._w) == 1)
return self._solve_cvxpy_opt_problem(verbose=verbose)
return self._solve_cvxpy_opt_problem()
def nonconvex_objective(
self,