예제 #1
0
    """ Merge explicit MatrixBase arguments

    >>> from diofant import MatrixSymbol, eye, Matrix, MatAdd, pprint
    >>> from diofant.matrices.expressions.matadd import merge_explicit
    >>> A = MatrixSymbol('A', 2, 2)
    >>> B = eye(2)
    >>> C = Matrix([[1, 2], [3, 4]])
    >>> X = MatAdd(A, B, C)
    >>> pprint(X, use_unicode=False)
    A + [1  0] + [1  2]
        [    ]   [    ]
        [0  1]   [3  4]
    >>> pprint(merge_explicit(X), use_unicode=False)
    A + [2  2]
        [    ]
        [3  5]
    """
    groups = sift(matadd.args, lambda arg: isinstance(arg, MatrixBase))
    if len(groups[True]) > 1:
        return MatAdd(*(groups[False] + [reduce(add, groups[True])]))
    else:
        return matadd


rules = (rm_id(lambda x: x == 0 or isinstance(x, ZeroMatrix)), unpack, flatten,
         glom(matrix_of, factor_of,
              combine), merge_explicit, sort(default_sort_key))

canonicalize = exhaust(
    condition(lambda x: isinstance(x, MatAdd), do_one(rules)))
예제 #2
0
def test_sort():
    assert sort(str)(Basic(3, 1, 2)) == Basic(1, 2, 3)
예제 #3
0
def test_sort():
    assert sort(str)(Basic(3, 1, 2)) == Basic(1, 2, 3)