Esempio n. 1
0
def test_einsum():

    A = ad.Variable(name="A", shape=[3, 2])
    B = ad.Variable(name="B", shape=[2, 3])
    y = ad.einsum('ik,kj->ij', A, B)

    assert AutodiffParser.parse(y.name, [A, B]).name == y.name
Esempio n. 2
0
def test_add_3():

    A = ad.Variable(name="A", shape=[3])
    B = ad.Variable(name="B", shape=[3])
    y = A + B + B

    assert AutodiffParser.parse(y.name, [A, B]).name == y.name
Esempio n. 3
0
def sympy_simplify(out, inputs):
    """
    Parameters
    ------------------
    out: The to-be simplified node.
    inputs: The nodes that are symbols.
    ------------------
    Returns 
    ------------------
    out: The simplified output.
    ------------------
    """
    # Retrieve all the leaf nodes to establish parser table.
    parser_input = get_all_inputs(out)
    cg = CharacterGetter()
    input_to_chars = {i: '__' + cg.getchar() for i in inputs}
    chars_to_input = dict(zip(input_to_chars.values(), input_to_chars.keys()))
    ss_name = f', '.join([input_to_chars[i] for i in inputs])
    ss = symbols(ss_name)
    formula = out.name
    # Visit the inputs in reverse topological order.
    all_nodes = reversed(find_topo_sort([out]))
    for i in all_nodes:
        if i in inputs:
            formula = formula.replace(i.name, input_to_chars[i])

    ret = str(simplify(formula))

    all_nodes = reversed(find_topo_sort([out]))
    for i in all_nodes:
        if i in inputs:
            ret = ret.replace(input_to_chars[i], i.name)
    return AutodiffParser.parse(ret, parser_input)
Esempio n. 4
0
def test_identity():

    A = ad.identity(3)

    assert AutodiffParser.parse(A.name, []).name == A.name
Esempio n. 5
0
def test_tensorinv():

    A = ad.Variable(name="A", shape=[3, 3])
    y = ad.tensorinv(A)

    assert AutodiffParser.parse(y.name, [A]).name == y.name
Esempio n. 6
0
def test_scalar_mul():

    A = ad.Variable(name="A", shape=[3])
    y = 3.0 * A

    assert AutodiffParser.parse(y.name, [A]).name == y.name