mirror of
https://github.com/robertmartin8/PyPortfolioOpt.git
synced 2022-11-27 18:02:41 +03:00
Make Verbose Option a Hidden API
This commit is contained in:
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user