(a: list[list[float]], b: list[float])
| 138 | |
| 139 | return splits |
| 140 | |
| 141 | |
| 142 | def _dot(a: Sequence[float], b: Sequence[float]) -> float: |
| 143 | return sum(x * y for x, y in zip(a, b)) |
| 144 | |
| 145 | |
| 146 | def _sigmoid(z: float) -> float: |
| 147 | if z >= 0: |
| 148 | ez = exp(-z) |
| 149 | return 1.0 / (1.0 + ez) |
| 150 | ez = exp(z) |
| 151 | return ez / (1.0 + ez) |
| 152 | |
| 153 | |
| 154 | def _solve_linear_system(a: list[list[float]], b: list[float]) -> list[float]: |
| 155 | n = len(a) |
| 156 | aug = [row[:] + [rhs] for row, rhs in zip(a, b)] |
| 157 | |
| 158 | for col in range(n): |
| 159 | pivot = max(range(col, n), key=lambda r: abs(aug[r][col])) |
| 160 | if abs(aug[pivot][col]) < _EPS: |
| 161 | raise ValueError("Singular linear system") |
| 162 | if pivot != col: |
| 163 | aug[col], aug[pivot] = aug[pivot], aug[col] |
| 164 | |
| 165 | div = aug[col][col] |
| 166 | for j in range(col, n + 1): |
| 167 | aug[col][j] /= div |
no test coverage detected