Coverage for src\pqlattice\linalg\_utils.py: 96%
28 statements
« prev ^ index » next coverage.py v7.11.0, created at 2026-01-11 23:45 +0100
« prev ^ index » next coverage.py v7.11.0, created at 2026-01-11 23:45 +0100
1import math
3from ..typing import Matrix, Vector, validate_aliases
6@validate_aliases
7def row_swap(m: Matrix, i: int, k: int) -> None:
8 """_summary_
10 Parameters
11 ----------
12 m : Matrix
13 _description_
14 i : int
15 _description_
16 k : int
17 _description_
18 """
19 m[[i, k]] = m[[k, i]]
22@validate_aliases
23def row_scale(m: Matrix, i: int, s: float | int) -> None:
24 """_summary_
26 Parameters
27 ----------
28 m : Matrix
29 _description_
30 i : int
31 _description_
32 s : float | int
33 _description_
34 """
35 m[i] *= s
38@validate_aliases
39def row_add(m: Matrix, i: int, k: int, s: float | int) -> None:
40 """_summary_
42 Parameters
43 ----------
44 m : Matrix
45 _description_
46 i : int
47 _description_
48 k : int
49 _description_
50 s : float | int
51 _description_
52 """
53 m[i] += s * m[k]
56@validate_aliases
57def col_swap(m: Matrix, i: int, k: int) -> None:
58 """_summary_
60 Parameters
61 ----------
62 m : Matrix
63 _description_
64 i : int
65 _description_
66 k : int
67 _description_
68 """
69 m[:, [i, k]] = m[:, [k, i]]
72@validate_aliases
73def col_scale(m: Matrix, i: int, s: float | int) -> None:
74 """_summary_
76 Parameters
77 ----------
78 m : Matrix
79 _description_
80 i : int
81 _description_
82 s : float | int
83 _description_
84 """
85 m[:, i] *= s
88@validate_aliases
89def col_add(m: Matrix, i: int, k: int, s: float | int) -> None:
90 """_summary_
92 Parameters
93 ----------
94 m : Matrix
95 _description_
96 i : int
97 _description_
98 k : int
99 _description_
100 s : float | int
101 _description_
102 """
103 m[:, i] += s * m[:, k]
106def norm2(v: Vector) -> int:
107 """_summary_
109 Parameters
110 ----------
111 v : Vector
112 _description_
114 Returns
115 -------
116 int
117 _description_
118 """
119 return int(v @ v.T)
122def norm(v: Vector) -> float:
123 """_summary_
125 Parameters
126 ----------
127 v : Vector
128 _description_
130 Returns
131 -------
132 float
133 _description_
134 """
135 return math.sqrt(norm2(v))
138def per_row_norm2(A: Matrix) -> list[int]:
139 """_summary_
141 Parameters
142 ----------
143 A : Matrix
144 _description_
146 Returns
147 -------
148 list[int]
149 _description_
150 """
151 return [norm2(row) for row in A]
154def per_row_norm(A: Matrix) -> list[float]:
155 """_summary_
157 Parameters
158 ----------
159 A : Matrix
160 _description_
162 Returns
163 -------
164 list[float]
165 _description_
166 """
167 return [math.sqrt(n2) for n2 in per_row_norm2(A)]