Coverage for cvxrisk/model.py: 100%

14 statements  

« prev     ^ index     » next       coverage.py v7.8.2, created at 2025-06-18 11:11 +0000

1# Copyright 2023 Stanford University Convex Optimization Group 

2# 

3# Licensed under the Apache License, Version 2.0 (the "License"); 

4# you may not use this file except in compliance with the License. 

5# You may obtain a copy of the License at 

6# 

7# http://www.apache.org/licenses/LICENSE-2.0 

8# 

9# Unless required by applicable law or agreed to in writing, software 

10# distributed under the License is distributed on an "AS IS" BASIS, 

11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 

12# See the License for the specific language governing permissions and 

13# limitations under the License. 

14"""Abstract risk model.""" 

15 

16from __future__ import annotations 

17 

18from abc import ABC, abstractmethod 

19from dataclasses import dataclass, field 

20 

21import cvxpy as cp 

22 

23 

24@dataclass 

25class Model(ABC): 

26 """Abstract risk model.""" 

27 

28 parameter: dict[str, cp.Parameter] = field(default_factory=dict) 

29 """parameter for the riskmodel""" 

30 

31 @abstractmethod 

32 def estimate(self, weights: cp.Variable, **kwargs) -> cp.Expression: 

33 """Estimate the variance given the portfolio weights. 

34 

35 Args: 

36 weights: CVXPY variable representing portfolio weights 

37 

38 **kwargs: Additional keyword arguments 

39 

40 Returns: 

41 CVXPY expression representing the estimated risk 

42 

43 """ 

44 

45 @abstractmethod 

46 def update(self, **kwargs) -> None: 

47 """Update the data in the risk model. 

48 

49 Args: 

50 **kwargs: Keyword arguments containing data to update the model 

51 

52 """ 

53 

54 @abstractmethod 

55 def constraints(self, weights: cp.Variable, **kwargs) -> list[cp.Constraint]: 

56 """Return the constraints for the risk model. 

57 

58 Args: 

59 weights: CVXPY variable representing portfolio weights 

60 

61 **kwargs: Additional keyword arguments 

62 

63 Returns: 

64 List of CVXPY constraints for the risk model 

65 

66 """