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
« prev ^ index » next coverage.py v7.8.2, created at 2025-06-18 11:11 +0000
1"""Random covariance matrix generation utilities."""
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
18import numpy as np
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.
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.
27 Args:
28 n: Size of the covariance matrix
29 seed: Random seed for reproducibility (optional)
31 Returns:
32 A random positive semi-definite n x n covariance matrix
34 """
35 rng = np.random.default_rng(seed)
36 a = rng.standard_normal((n, n))
37 return np.transpose(a) @ a