Ejemplo n.º 1
0
def check_isabstract(constructor, *args):
    # Regular application should not give anything abstract.
    assert not B.isabstract(constructor(*args))

    # Force each of the arguments to be abstract and check the result.
    for i in range(len(args)):
        tracked = []

        @B.jit
        def f(x):
            mat = constructor(*(x if j == i else args[j]
                                for j in range(len(args))))
            tracked.append(B.isabstract(mat))
            return B.sum(mat)

        f(jnp.array(B.dense(args[i])))

        # First run should be concrete: populate control flow cache.
        assert not tracked[0]
        # Second run should be abstract.
        assert tracked[1]
        # And that should be all.
        assert len(tracked) == 2
Ejemplo n.º 2
0
 def f(x):
     mat = constructor(*(x if j == i else args[j]
                         for j in range(len(args))))
     tracked.append(B.isabstract(mat))
     return B.sum(mat)
Ejemplo n.º 3
0
def isabstract(a: Kronecker):
    return B.isabstract(a.left) or B.isabstract(a.right)
Ejemplo n.º 4
0
def isabstract(a: LowRank):
    return B.isabstract(a.left) or B.isabstract(a.middle) or B.isabstract(
        a.right)
Ejemplo n.º 5
0
def isabstract(a: Woodbury):
    return B.isabstract(a.diag) or B.isabstract(a.lr)
Ejemplo n.º 6
0
def isabstract(a: Constant):
    return B.isabstract(a.const)
Ejemplo n.º 7
0
def isabstract(a: Diagonal):
    return B.isabstract(a.diag)
Ejemplo n.º 8
0
def isabstract(a: Union[Dense, LowerTriangular, UpperTriangular]):
    return B.isabstract(a.mat)
Ejemplo n.º 9
0
 def f(x):
     tracked.append(B.isabstract(x))
     return B.sum(x)
Ejemplo n.º 10
0
def test_isabstract_false(check_lazy_shapes):
    for a in Tensor().forms():
        assert not B.isabstract(a)