mirror of
https://github.com/robertmartin8/PyPortfolioOpt.git
synced 2022-11-27 18:02:41 +03:00
Expose cvxpy DCP trace in case of error (#173)
This commit is contained in:
@@ -215,8 +215,8 @@ class BaseConvexOptimizer(BaseOptimizer):
|
|||||||
opt.solve(solver=self.solver, verbose=True)
|
opt.solve(solver=self.solver, verbose=True)
|
||||||
else:
|
else:
|
||||||
opt.solve()
|
opt.solve()
|
||||||
except (TypeError, cp.DCPError):
|
except (TypeError, cp.DCPError) as e:
|
||||||
raise exceptions.OptimizationError
|
raise exceptions.OptimizationError from e
|
||||||
if opt.status != "optimal":
|
if opt.status != "optimal":
|
||||||
raise exceptions.OptimizationError
|
raise exceptions.OptimizationError
|
||||||
self.weights = self._w.value.round(16) + 0.0 # +0.0 removes signed zero
|
self.weights = self._w.value.round(16) + 0.0 # +0.0 removes signed zero
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ The ``exceptions`` module houses custom exceptions. Currently implemented:
|
|||||||
|
|
||||||
- OptimizationError
|
- OptimizationError
|
||||||
"""
|
"""
|
||||||
import traceback
|
|
||||||
|
|
||||||
|
|
||||||
class OptimizationError(Exception):
|
class OptimizationError(Exception):
|
||||||
@@ -16,9 +15,4 @@ class OptimizationError(Exception):
|
|||||||
default_message = (
|
default_message = (
|
||||||
"Please check your objectives/constraints or use a different solver."
|
"Please check your objectives/constraints or use a different solver."
|
||||||
)
|
)
|
||||||
|
super().__init__(default_message, *args, **kwargs)
|
||||||
if not (args or kwargs):
|
|
||||||
args = (default_message,)
|
|
||||||
super().__init__(*args, **kwargs)
|
|
||||||
|
|
||||||
traceback.print_exc()
|
|
||||||
|
|||||||
Reference in New Issue
Block a user