コード例 #1
0
    def test_constructor_shape(self):
        """Test construction of shape of tensor"""

        ranks = ["M", "K"]
        shape = [4, 8]

        t = Tensor(rank_ids=ranks, shape=shape)

        self.assertEqual(t.getRankIds(), ranks)
        self.assertEqual(t.getRoot().getRankIds(), ranks)

        self.assertEqual(t.getShape(), shape)
        self.assertEqual(t.getRoot().getShape(), shape)
コード例 #2
0
    def test_constructor_rank_0D(self):
        """Test construction of 0-D tensor"""

        t = Tensor(rank_ids=[])
        p = t.getRoot()
        p += 1

        self.assertEqual(p, 1)
コード例 #3
0
    def test_constructor_empty(self):
        """Test construction of empty tensor"""

        ranks = ["M", "K"]

        t = Tensor(rank_ids=ranks)
        self.assertEqual(t.getRankIds(), ranks)
        self.assertEqual(t.getRoot().getRankIds(), ranks)
コード例 #4
0
    def test_shape_0D(self):
        """Test shpe of 0-D tensor"""

        t = Tensor(rank_ids=[])
        p = t.getRoot()
        p += 1

        self.assertEqual(t.getRankIds(), [])
        self.assertEqual(t.getShape(), [])
コード例 #5
0
    def test_fromYAMLfile_0D(self):
        """Test construction of 0-D tensor from a YAML file"""

        tensor_ref = Tensor(rank_ids=[])
        root = tensor_ref.getRoot()
        root += 2

        tensor = Tensor.fromYAMLfile("./data/tensor_0d.yaml")

        self.assertTrue(tensor == tensor_ref)
コード例 #6
0
    def test_0D(self):
        "Test sum to rank 0 tensor"

        a = Tensor.fromYAMLfile("./data/conv-activations-a.yaml")
        z = Tensor(rank_ids=[])

        a_m = a.getRoot()
        z_ref = z.getRoot()

        for m_coord, (a_val) in a_m:
            z_ref += a_val

        self.assertEqual(z_ref, 12)
コード例 #7
0
    def test_copy(self):
        """Copy a tensor"""

        a = Tensor.fromYAMLfile("./data/test_tensor-1.yaml")
        z = Tensor(rank_ids=["M", "K"])

        a_m = a.getRoot()
        z_m = z.getRoot()

        for m, (z_k, a_k) in z_m << a_m:
            for k, (z_ref, a_val) in z_k << a_k:
                z_ref += a_val

        self.assertEqual(a, z)
コード例 #8
0
    def test_getPayloadRef_0d(self):
        """Test getPayloadRef of a 0-D tensor"""

        p_ref = 10

        t = Tensor(rank_ids=[])
        r = t.getRoot()
        r <<= p_ref

        p = t.getPayloadRef()
        self.assertEqual(p_ref, p)

        p = t.getPayloadRef(0)
        self.assertEqual(p_ref, p)

        p = t.getPayloadRef(1)
        self.assertEqual(p_ref, p)
コード例 #9
0
    def test_print_0D(self):
        """Test printing a 0-D tensor"""

        a = Tensor(rank_ids=[])
        p = a.getRoot()
        p += 2

        a_s_ref = "<2>"

        a_s = f"{a}"

        self.assertEqual(a_s, a_s_ref)

        a_r_ref = "T()/[Payload(2)]"

        a_r = f"{a!r}"

        self.assertEqual(a_r, a_r_ref)
コード例 #10
0
    def test_fromUncompressed_20(self):
        """Test construction of a tensor a scalar"""

        t_ref = Tensor(rank_ids=[])
        p = t_ref.getRoot()
        p += 2

        t0 = Tensor.fromUncompressed([], 2)

        self.assertEqual(t0, t_ref)

        t1 = Tensor.fromUncompressed(rank_ids=[], root=2)

        self.assertEqual(t1, t_ref)

        t2 = Tensor.fromUncompressed(root=2)

        self.assertEqual(t2, t_ref)
コード例 #11
0
    def test_dot(self):
        "Test dot product"

        a = Tensor.fromYAMLfile("./data/tensor_sum_a.yaml")
        b = Tensor.fromYAMLfile("./data/tensor_sum_b.yaml")
        z = Tensor(rank_ids=["M"])

        a_m = a.getRoot()
        b_m = b.getRoot()
        z_m = z.getRoot()

        for m_coord, (z_ref, (a_k, b_k)) in z_m << (a_m & b_m):
            for k_coord, (a_val, b_val) in a_k & b_k:
                z_ref += a_val * b_val

        z_correct = Tensor.fromYAMLfile("./data/tensor_dot_z.yaml")

        self.assertEqual(z, z_correct)
コード例 #12
0
    def test_default_nonscalar(self):
        """Test set/get of nonzero default"""

        t = Tensor(rank_ids=["X", "Y", "Z"])

        v = (10, 10)
        e = Fiber([], [])

        t.setDefault(v)
        self.assertEqual(t.getDefault(), v)

        t_root = t.getRoot()

        x = t_root.getPayload(1)
        self.assertEqual(x, e)

        y = t_root.getPayload(1, 2)
        self.assertEqual(y, e)

        z = t_root.getPayload(1, 2, 3)
        self.assertEqual(z, v)
コード例 #13
0
    def test_default(self):
        """Test of default default"""

        t = Tensor(rank_ids=["X", "Y", "Z"])

        e = Fiber([], [])

        self.assertEqual(t.getDefault(), 0)

        t_root = t.getRoot()

        x = t_root.getPayload(1)
        self.assertEqual(x, e)
        self.assertEqual(x.getDefault(), Fiber)

        y = t_root.getPayload(1, 2)
        self.assertEqual(y, e)
        self.assertEqual(y.getDefault(), 0)

        z = t_root.getPayload(1, 2, 3)
        self.assertEqual(z, 0)
コード例 #14
0
    def test_conv1d_ws(self):
        """Convolution 1d ws"""

        w = Tensor.fromYAMLfile("./data/conv-weights-a.yaml")
        i = Tensor.fromYAMLfile("./data/conv-activations-a.yaml")
        o = Tensor(rank_ids=["Q"])

        w_r = w.getRoot()
        i_h = i.getRoot()
        o_q = o.getRoot()

        W = w_r.maxCoord() + 1
        I = i_h.maxCoord() + 1
        Q = I - W + 1

        for r, (w_val) in w_r:
            for q, (o_q_ref,
                    i_val) in o_q << i_h.project(lambda h: h - r, (0, Q)):
                o_q_ref += w_val * i_val

        o_ref = Tensor.fromYAMLfile("./data/conv-output-a.yaml")

        self.assertEqual(o, o_ref)
コード例 #15
0
    def test_conv1d_os(self):
        """Convolution 1d os"""

        w = Tensor.fromYAMLfile("./data/conv-weights-a.yaml")
        i = Tensor.fromYAMLfile("./data/conv-activations-a.yaml")
        o = Tensor(rank_ids=["Q"])

        w_r = w.getRoot()
        i_h = i.getRoot()
        o_q = o.getRoot()

        W = w_r.maxCoord() + 1
        I = i_h.maxCoord() + 1
        Q = I - W + 1

        output_shape = Fiber(coords=range(Q), initial=1)

        for q, (o_q_ref, _) in o_q << output_shape:
            for r, (w_val, i_val) in w_r.project(lambda r: q + r) & i_h:
                o_q_ref += w_val * i_val

        o_ref = Tensor.fromYAMLfile("./data/conv-output-os-a.yaml")

        self.assertEqual(o, o_ref)
コード例 #16
0
ファイル: bfs.py プロジェクト: Fibertree-Project/fibertree
# Adjacency matrix
a = Tensor.fromUncompressed(
    ["S", "D"], [[0, 1, 1, 0, 0, 0], [0, 0, 1, 1, 0, 0], [0, 0, 0, 1, 1, 0],
                 [0, 0, 0, 0, 1, 1], [1, 0, 0, 0, 0, 1], [1, 1, 0, 0, 0, 0]])

# Fringe (current and next)
f0 = Tensor.fromUncompressed(["D"], [1, 0, 0, 0, 0, 0])

# Distance
d = Tensor(rank_ids=["S"])

# Get root fibers
a_s = a.getRoot()
f0_d = f0.getRoot()
d_d = d.getRoot()

print("BFS")

level = 1

while (f0_d.countValues() > 0):
    f0_d.print("\nFringe")

    f1 = Tensor(rank_ids=["D"])
    f1_d = f1.getRoot()

    for s, (_, a_d) in f0_d & a_s:
        print(f"Processing source {s}")
        print(f"Neighbors:\n {a_d}")
コード例 #17
0
print("")

data_dir = "../../data"

a = Tensor.fromYAMLfile(os.path.join(data_dir, "spMspV-a.yaml"))
b = Tensor.fromYAMLfile(os.path.join(data_dir, "spMspV-b.yaml"))

z = Tensor(rank_ids=["M"])

a.print("A Tensor")
b.print("B Tensor")
z.print("Z Tensor")

a_m = a.getRoot()
b_k = b.getRoot()
z_m = z.getRoot()

a_m.print("A Tensor - Rank M")
b_k.print("B Tensor - Rank K")
z_m.print("Z Tensor - Rank M")

for m_coord, (z_ref, a_k) in (z_m << a_m):
    for k_coord, (a_val, b_val) in (a_k & b_k):
        z_ref += a_val * b_val  # reducing a scalar

z.print("\nZ Tensor")

print("")
print("--------------------------------------")
print("")
コード例 #18
0
print("----------------------------------------")
print("")

data_dir = "../../data"

w = Tensor.fromYAMLfile(os.path.join(data_dir, "conv-weights-a.yaml"))
i = Tensor.fromYAMLfile(os.path.join(data_dir, "conv-activations-a.yaml"))
o = Tensor(rank_ids=["Q"])

w.print("W Tensor")
i.print("I Tensor")
o.print("O Tensor")

w_r = w.getRoot()
i_h = i.getRoot()
o_q = o.getRoot()

W = w_r.maxCoord() + 1
I = i_h.maxCoord() + 1
Q = I - W + 1

w_r.print("W Tensor - R rank - size=%s" % W)
i_h.print("I Tensor - H rank - size=%s" % I)
o_q.print("O Tensor - Q rank - size=%s" % I)

print("Convolution")

for h, (i_val) in i_h:
    print(f"Processing input: ({h}, ({i_val}))")
    for q, (o_q_ref, w_val) in o_q << w_r.project(lambda r: h - r, (0, Q)):
        print(f"  Processing output ({q}, ({o_q_ref}, {w_val})")