Skip to content

Commit bbc9bde

Browse files
Merge pull request sympy#19233 from oscarbenjamin/pr_expand_mul_revert
Remove expand_mul call in cholesky and LDLdecompisition
2 parents 418073d + 04af04c commit bbc9bde

File tree

3 files changed

+14
-16
lines changed

3 files changed

+14
-16
lines changed

sympy/matrices/decompositions.py

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -257,16 +257,15 @@ def _cholesky(M, hermitian=True):
257257
if not hermitian and not M.is_symmetric():
258258
raise ValueError("Matrix must be symmetric.")
259259

260-
dps = _get_intermediate_simp(expand_mul, expand_mul)
261260
L = MutableDenseMatrix.zeros(M.rows, M.rows)
262261

263262
if hermitian:
264263
for i in range(M.rows):
265264
for j in range(i):
266-
L[i, j] = dps((1 / L[j, j])*(M[i, j] -
265+
L[i, j] = ((1 / L[j, j])*(M[i, j] -
267266
sum(L[i, k]*L[j, k].conjugate() for k in range(j))))
268267

269-
Lii2 = dps(M[i, i] -
268+
Lii2 = (M[i, i] -
270269
sum(L[i, k]*L[i, k].conjugate() for k in range(i)))
271270

272271
if Lii2.is_positive is False:
@@ -278,11 +277,11 @@ def _cholesky(M, hermitian=True):
278277
else:
279278
for i in range(M.rows):
280279
for j in range(i):
281-
L[i, j] = dps((1 / L[j, j])*(M[i, j] -
280+
L[i, j] = ((1 / L[j, j])*(M[i, j] -
282281
sum(L[i, k]*L[j, k] for k in range(j))))
283282

284-
L[i, i] = sqrt(dps(M[i, i] -
285-
sum(L[i, k]**2 for k in range(i))))
283+
L[i, i] = sqrt(M[i, i] -
284+
sum(L[i, k]**2 for k in range(i)))
286285

287286
return M._new(L)
288287

@@ -460,17 +459,16 @@ def _LDLdecomposition(M, hermitian=True):
460459
if not hermitian and not M.is_symmetric():
461460
raise ValueError("Matrix must be symmetric.")
462461

463-
dps = _get_intermediate_simp(expand_mul, expand_mul)
464462
D = MutableDenseMatrix.zeros(M.rows, M.rows)
465463
L = MutableDenseMatrix.eye(M.rows)
466464

467465
if hermitian:
468466
for i in range(M.rows):
469467
for j in range(i):
470-
L[i, j] = dps((1 / D[j, j])*(M[i, j] - sum(
471-
L[i, k]*L[j, k].conjugate()*D[k, k] for k in range(j))))
468+
L[i, j] = (1 / D[j, j])*(M[i, j] - sum(
469+
L[i, k]*L[j, k].conjugate()*D[k, k] for k in range(j)))
472470

473-
D[i, i] = dps(M[i, i] -
471+
D[i, i] = (M[i, i] -
474472
sum(L[i, k]*L[i, k].conjugate()*D[k, k] for k in range(i)))
475473

476474
if D[i, i].is_positive is False:
@@ -480,10 +478,10 @@ def _LDLdecomposition(M, hermitian=True):
480478
else:
481479
for i in range(M.rows):
482480
for j in range(i):
483-
L[i, j] = dps((1 / D[j, j])*(M[i, j] - sum(
484-
L[i, k]*L[j, k]*D[k, k] for k in range(j))))
481+
L[i, j] = (1 / D[j, j])*(M[i, j] - sum(
482+
L[i, k]*L[j, k]*D[k, k] for k in range(j)))
485483

486-
D[i, i] = dps(M[i, i] - sum(L[i, k]**2*D[k, k] for k in range(i)))
484+
D[i, i] = M[i, i] - sum(L[i, k]**2*D[k, k] for k in range(i))
487485

488486
return M._new(L), M._new(D)
489487

sympy/matrices/tests/test_decompositions.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -281,8 +281,8 @@ def test_LDLdecomposition():
281281
A = Matrix(((4, -2*I, 2 + 2*I), (2*I, 2, -1 + I), (2 - 2*I, -1 - I, 11)))
282282
L, D = A.LDLdecomposition()
283283
assert expand_mul(L * D * L.H) == A
284-
assert L == Matrix(((1, 0, 0), (I/2, 1, 0), (S.Half - I/2, 0, 1)))
285-
assert D == Matrix(((4, 0, 0), (0, 1, 0), (0, 0, 9)))
284+
assert L.expand() == Matrix([[1, 0, 0], [I/2, 1, 0], [S.Half - I/2, 0, 1]])
285+
assert D.expand() == Matrix(((4, 0, 0), (0, 1, 0), (0, 0, 9)))
286286

287287
raises(NonSquareMatrixError, lambda: SparseMatrix((1, 2)).LDLdecomposition())
288288
raises(ValueError, lambda: SparseMatrix(((1, 2), (3, 4))).LDLdecomposition())

sympy/matrices/tests/test_matrices.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1976,7 +1976,7 @@ def test_cholesky():
19761976
assert L.is_lower
19771977
assert L == Matrix([[5, 0, 0], [3, 3, 0], [-1, 1, 3]])
19781978
A = Matrix(((4, -2*I, 2 + 2*I), (2*I, 2, -1 + I), (2 - 2*I, -1 - I, 11)))
1979-
assert A.cholesky() == Matrix(((2, 0, 0), (I, 1, 0), (1 - I, 0, 3)))
1979+
assert A.cholesky().expand() == Matrix(((2, 0, 0), (I, 1, 0), (1 - I, 0, 3)))
19801980

19811981
raises(NonSquareMatrixError, lambda: SparseMatrix((1, 2)).cholesky())
19821982
raises(ValueError, lambda: SparseMatrix(((1, 2), (3, 4))).cholesky())

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy