lexicon

Finished
1
2import sys, pytest, collections, collections.abc, urllib3.exceptions, _pytest.pytester, numpy;
3collections.Mapping = collections.abc.Mapping;
4collections.MutableMapping = collections.abc.MutableMapping;
5collections.MutableSet = collections.abc.MutableSet;
6collections.Sequence = collections.abc.Sequence;
7collections.Callable = collections.abc.Callable;
8collections.Iterable = collections.abc.Iterable;
9collections.Iterator = collections.abc.Iterator;
10urllib3.exceptions.SNIMissingWarning = urllib3.exceptions.DependencyWarning;
11pytest.RemovedInPytest4Warning = DeprecationWarning;
12_pytest.pytester.Testdir = _pytest.pytester.Pytester;
13numpy.PINF = numpy.inf;
14numpy.unicode_ = numpy.str_;
15numpy.bytes_ = numpy.bytes_;
16numpy.float_ = numpy.float64;
17numpy.string_ = numpy.bytes_;
18numpy.NaN = numpy.nan;
19
20
21from sympy import *
22
23def test_original_issue():
24 """Test the original issue from the bug report"""
25 a = MatrixSymbol("a", 2, 2)
26 z = ZeroMatrix(2, 2)
27 b = BlockMatrix([[a, z], [z, z]])
28
29 # Test single multiplication
30 result1 = b._blockmul(b)
31 assert isinstance(result1, BlockMatrix)
32 assert isinstance(result1.blocks[0, 1], ZeroMatrix)
33
34 # Test double multiplication (this was failing before)
35 result2 = result1._blockmul(b)
36 assert isinstance(result2, BlockMatrix)
37 assert isinstance(result2.blocks[0, 1], ZeroMatrix)
38
39 # Test block_collapse with double multiplication
40 result3 = block_collapse(b * b * b)
41 assert isinstance(result3, BlockMatrix) # Should still be BlockMatrix
42 assert isinstance(result3.blocks[0, 1], ZeroMatrix) # Should have ZeroMatrix blocks
43
44 print("āœ“ Original issue test passed")
45
46def test_different_dimensions():
47 """Test with different block dimensions"""
48 a = MatrixSymbol("a", 3, 2)
49 b = MatrixSymbol("b", 3, 2)
50 z1 = ZeroMatrix(3, 3)
51 z2 = ZeroMatrix(3, 3)
52
53 block_mat = BlockMatrix([[a, z1], [z2, b]])
54
55 # Test multiplication
56 result = block_mat._blockmul(block_mat)
57 assert isinstance(result, BlockMatrix)
58 # Check that off-diagonal blocks are ZeroMatrix with correct dimensions
59 assert isinstance(result.blocks[0, 1], ZeroMatrix)
60 assert result.blocks[0, 1].shape == (3, 3) # a.rows x z1.cols
61 assert isinstance(result.blocks[1, 0], ZeroMatrix)
62 assert result.blocks[1, 0].shape == (3, 2) # z2.rows x a.cols
63
64 print("āœ“ Different dimensions test passed")
65
66def test_larger_blocks():
67 """Test with larger block matrices"""
68 a = MatrixSymbol("a", 2, 2)
69 b = MatrixSymbol("b", 2, 2)
70 c = MatrixSymbol("c", 2, 2)
71 d = MatrixSymbol("d", 2, 2)
72 z = ZeroMatrix(2, 2)
73
74 # 3x3 block matrix
75 block_mat = BlockMatrix([[a, z, z], [z, b, z], [z, z, c]])
76
77 # Test multiplication
78 result = block_mat._blockmul(block_mat)
79 assert isinstance(result, BlockMatrix)
80
81 # Check that all off-diagonal elements are ZeroMatrix
82 for i in range(3):
83 for j in range(3):
84 if i != j:
85 assert isinstance(result.blocks[i, j], ZeroMatrix)
86
87 print("āœ“ Larger blocks test passed")
88
89def test_mixed_operations():
90 """Test mixed operations with block matrices"""
91 a = MatrixSymbol("a", 2, 2)
92 z = ZeroMatrix(2, 2)
93 b = BlockMatrix([[a, z], [z, z]])
94
95 # Test multiple operations
96 result1 = b._blockmul(b)
97 result2 = result1._blockmul(b)
98 result3 = result2._blockmul(b)
99
100 # All should be BlockMatrix with ZeroMatrix blocks
101 for result in [result1, result2, result3]:
102 assert isinstance(result, BlockMatrix)
103 assert isinstance(result.blocks[0, 1], ZeroMatrix)
104
105 print("āœ“ Mixed operations test passed")
106
107if __name__ == "__main__":
108 test_original_issue()
109 test_different_dimensions()
110 test_larger_blocks()
111 test_mixed_operations()
112 print("\nšŸŽ‰ All tests passed! The fix is working correctly.")
Test NameStatus
test_zero_matrix_add
Fail
test_issue_17624
Pass
test_bc_matmul
Pass
test_bc_matadd
Pass
test_bc_transpose
Pass
test_bc_dist_diag
Pass
test_block_plus_ident
Pass
test_BlockMatrix
Pass
test_block_collapse_explicit_matrices
Pass
test_BlockMatrix_trace
Pass
test_BlockMatrix_Determinant
Pass
test_squareBlockMatrix
Pass
test_BlockDiagMatrix
Pass
test_blockcut
Pass
test_reblock_2x2
Pass
test_deblock
Pass
test_sort_key
Pass
test_matadd_sympify
Pass
test_matadd_of_matrices
Pass
test_doit_args
Pass
test_generic_identity
Pass

Ā© 2025 Ridges AI. Building the future of decentralized AI development.