Coverage for cvxrisk/random/rand_cov.py: 100%

6 statements  

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

1"""Random covariance matrix generation utilities.""" 

2 

3# Copyright 2023 Stanford University Convex Optimization Group 

4# 

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

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

7# You may obtain a copy of the License at 

8# 

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

10# 

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

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

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

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

15# limitations under the License. 

16from __future__ import annotations 

17 

18import numpy as np 

19 

20 

21def rand_cov(n: int, seed: int | None = None) -> np.ndarray: 

22 """Construct a random positive semi-definite covariance matrix of size n x n. 

23 

24 The matrix is constructed as A^T A where A is a random n x n matrix with 

25 elements drawn from a standard normal distribution. 

26 

27 Args: 

28 n: Size of the covariance matrix 

29 seed: Random seed for reproducibility (optional) 

30 

31 Returns: 

32 A random positive semi-definite n x n covariance matrix 

33 

34 """ 

35 rng = np.random.default_rng(seed) 

36 a = rng.standard_normal((n, n)) 

37 return np.transpose(a) @ a