com.microsoft - Trilu#
Trilu - 1#
Version
name: Trilu (GitHub)
domain: com.microsoft
since_version: 1
function:
support_level: SupportType.COMMON
shape inference: True
This version of the operator has been available since version 1 of domain com.microsoft.
Summary
Attributes
upper - INT : Boolean. Indicates whether upper or lower part of matrix is retained. Default is true.
Inputs
Between 1 and 2 inputs.
X (heterogeneous) - T:
k (optional, heterogeneous) - tensor(int64):
Outputs
Y (heterogeneous) - T:
Type Constraints
T in ( tensor(bfloat16), tensor(bool), tensor(double), tensor(float), tensor(float16), tensor(int16), tensor(int32), tensor(int64), tensor(int8), tensor(uint16), tensor(uint32), tensor(uint64), tensor(uint8) ): Constrain input and output types to all numeric tensors and bool tensors.
Examples
_triu
import numpy as np
import onnx
node = onnx.helper.make_node(
"Trilu",
inputs=["x"],
outputs=["y"],
)
x = np.random.randint(10, size=(4, 5)).astype(np.int64)
# X:
# [[4, 7, 3, 7, 9],
# [1, 2, 8, 6, 9],
# [9, 4, 0, 8, 7],
# [4, 3, 4, 2, 4]]
# expect result:
# [[4, 7, 3, 7, 9],
# [0, 2, 8, 6, 9],
# [0, 0, 0, 8, 7],
# [0, 0, 0, 2, 4]]
y = triu_reference_implementation(x)
expect(node, inputs=[x], outputs=[y], name="test_triu")
_triu_neg
import numpy as np
import onnx
node = onnx.helper.make_node(
"Trilu",
inputs=["x", "k"],
outputs=["y"],
)
x = np.random.randint(10, size=(4, 5)).astype(np.int64)
k = np.array(-1).astype(np.int64)
# X:
# [[4, 7, 3, 7, 9],
# [1, 2, 8, 6, 9],
# [9, 4, 0, 8, 7],
# [4, 3, 4, 2, 4]]
# expect result:
# [[4, 7, 3, 7, 9],
# [1, 2, 8, 6, 9],
# [0, 4, 0, 8, 7],
# [0, 0, 4, 2, 4]]
y = triu_reference_implementation(x, int(k))
expect(node, inputs=[x, k], outputs=[y], name="test_triu_neg")
_triu_out_neg_out
import numpy as np
import onnx
node = onnx.helper.make_node(
"Trilu",
inputs=["x", "k"],
outputs=["y"],
)
x = np.random.randint(10, size=(4, 5)).astype(np.int64)
k = np.array(-7).astype(np.int64)
# X:
# [[4, 7, 3, 7, 9],
# [1, 2, 8, 6, 9],
# [9, 4, 0, 8, 7],
# [4, 3, 4, 2, 4]]
# expect result:
# [[4, 7, 3, 7, 9],
# [1, 2, 8, 6, 9],
# [9, 4, 0, 8, 7],
# [4, 3, 4, 2, 4]]
y = triu_reference_implementation(x, int(k))
expect(node, inputs=[x, k], outputs=[y], name="test_triu_out_neg_out")
_triu_pos
import numpy as np
import onnx
node = onnx.helper.make_node(
"Trilu",
inputs=["x", "k"],
outputs=["y"],
)
x = np.random.randint(10, size=(4, 5)).astype(np.int64)
k = np.array(2).astype(np.int64)
# X:
# [[4, 7, 3, 7, 9],
# [1, 2, 8, 6, 9],
# [9, 4, 0, 8, 7],
# [4, 3, 4, 2, 4]]
# expect result:
# [[0, 0, 3, 7, 9],
# [0, 0, 0, 6, 9],
# [0, 0, 0, 0, 7],
# [0, 0, 0, 0, 0]]
y = triu_reference_implementation(x, int(k))
expect(node, inputs=[x, k], outputs=[y], name="test_triu_pos")
_triu_out_pos
import numpy as np
import onnx
node = onnx.helper.make_node(
"Trilu",
inputs=["x", "k"],
outputs=["y"],
)
x = np.random.randint(10, size=(4, 5)).astype(np.int64)
k = np.array(6).astype(np.int64)
# X:
# [[4, 7, 3, 7, 9],
# [1, 2, 8, 6, 9],
# [9, 4, 0, 8, 7],
# [4, 3, 4, 2, 4]]
# expect result:
# [[0, 0, 0, 0, 0],
# [0, 0, 0, 0, 0],
# [0, 0, 0, 0, 0],
# [0, 0, 0, 0, 0]]
y = triu_reference_implementation(x, int(k))
expect(node, inputs=[x, k], outputs=[y], name="test_triu_out_pos")
_triu_square
import numpy as np
import onnx
node = onnx.helper.make_node(
"Trilu",
inputs=["x"],
outputs=["y"],
)
x = np.random.randint(10, size=(2, 3, 3)).astype(np.int64)
y = triu_reference_implementation(x)
# X:
# [[[4, 6, 9],
# [7, 5, 4],
# [8, 1, 2]],
#
# [[1, 4, 9],
# [9, 6, 3],
# [8, 9, 8]]]
# expect result:
# [[[4, 6, 9],
# [0, 5, 4],
# [0, 0, 2]],
#
# [[1, 4, 9],
# [0, 6, 3],
# [0, 0, 8]]]
expect(node, inputs=[x], outputs=[y], name="test_triu_square")
_triu_square_neg
import numpy as np
import onnx
node = onnx.helper.make_node(
"Trilu",
inputs=["x", "k"],
outputs=["y"],
)
x = np.random.randint(10, size=(2, 3, 3)).astype(np.int64)
k = np.array(-1).astype(np.int64)
# X:
# [[[4, 6, 9],
# [7, 5, 4],
# [8, 1, 2]],
#
# [[1, 4, 9],
# [9, 6, 3],
# [8, 9, 8]]]
# expect result:
# [[[4, 6, 9],
# [7, 5, 4],
# [0, 1, 2]],
#
# [[1, 4, 9],
# [9, 6, 3],
# [0, 9, 8]]]
y = triu_reference_implementation(x, int(k))
expect(node, inputs=[x, k], outputs=[y], name="test_triu_square_neg")
_triu_one_row
import numpy as np
import onnx
node = onnx.helper.make_node(
"Trilu",
inputs=["x", "k"],
outputs=["y"],
)
x = np.random.randint(10, size=(3, 1, 5)).astype(np.int64)
k = np.array(1).astype(np.int64)
# X:
# [[[1, 4, 9, 7, 1]],
#
# [[9, 2, 8, 8, 4]],
#
# [[3, 9, 7, 4, 2]]]
# expect result:
# [[[0, 4, 9, 7, 1]],
#
# [[0, 2, 8, 8, 4]],
#
# [[0, 9, 7, 4, 2]]]
y = triu_reference_implementation(x, int(k))
expect(node, inputs=[x, k], outputs=[y], name="test_triu_one_row")
_triu_zero
import numpy as np
import onnx
node = onnx.helper.make_node(
"Trilu",
inputs=["x", "k"],
outputs=["y"],
)
x = np.random.randint(10, size=(0, 5)).astype(np.int64)
k = np.array(6).astype(np.int64)
# X:
# []
# expect result:
# []
y = triu_reference_implementation(x, int(k))
expect(node, inputs=[x, k], outputs=[y], name="test_triu_zero")
_tril
import numpy as np
import onnx
node = onnx.helper.make_node(
"Trilu",
inputs=["x"],
outputs=["y"],
upper=0,
)
x = np.random.randint(10, size=(4, 5)).astype(np.int64)
# X:
# [[4, 7, 3, 7, 9],
# [1, 2, 8, 6, 9],
# [9, 4, 1, 8, 7],
# [4, 3, 4, 2, 4]]
# expect result:
# [[4, 0, 0, 0, 0],
# [1, 2, 0, 0, 0],
# [9, 4, 1, 0, 0],
# [4, 3, 4, 2, 0]]
y = tril_reference_implementation(x)
expect(node, inputs=[x], outputs=[y], name="test_tril")
_tril_neg
import numpy as np
import onnx
node = onnx.helper.make_node(
"Trilu",
inputs=["x", "k"],
outputs=["y"],
upper=0,
)
x = np.random.randint(10, size=(4, 5)).astype(np.int64)
k = np.array(-1).astype(np.int64)
# X:
# [[4, 7, 3, 7, 9],
# [1, 2, 8, 6, 9],
# [9, 4, 1, 8, 7],
# [4, 3, 4, 2, 4]]
# expect result:
# [[0, 0, 0, 0, 0],
# [1, 0, 0, 0, 0],
# [9, 4, 0, 0, 0],
# [4, 3, 4, 0, 0]]
y = tril_reference_implementation(x, int(k))
expect(node, inputs=[x, k], outputs=[y], name="test_tril_neg")
_tril_out_neg
import numpy as np
import onnx
node = onnx.helper.make_node(
"Trilu",
inputs=["x", "k"],
outputs=["y"],
upper=0,
)
x = np.random.randint(10, size=(4, 5)).astype(np.int64)
k = np.array(-7).astype(np.int64)
# X:
# [[4, 7, 3, 7, 9],
# [1, 2, 8, 6, 9],
# [9, 4, 1, 8, 7],
# [4, 3, 4, 2, 4]]
# expect result:
# [[0, 0, 0, 0, 0],
# [0, 0, 0, 0, 0],
# [0, 0, 0, 0, 0],
# [0, 0, 0, 0, 0]]
y = tril_reference_implementation(x, int(k))
expect(node, inputs=[x, k], outputs=[y], name="test_tril_out_neg")
_tril_pos
import numpy as np
import onnx
node = onnx.helper.make_node(
"Trilu",
inputs=["x", "k"],
outputs=["y"],
upper=0,
)
x = np.random.randint(10, size=(4, 5)).astype(np.int64)
k = np.array(2).astype(np.int64)
# X:
# [[4, 7, 3, 7, 9],
# [1, 2, 8, 6, 9],
# [9, 4, 1, 8, 7],
# [4, 3, 4, 2, 4]]
# expect result:
# [[4, 7, 3, 0, 0],
# [1, 2, 8, 6, 0],
# [9, 4, 1, 8, 7],
# [4, 3, 4, 2, 4]]
y = tril_reference_implementation(x, int(k))
expect(node, inputs=[x, k], outputs=[y], name="test_tril_pos")
_tril_out_pos
import numpy as np
import onnx
node = onnx.helper.make_node(
"Trilu",
inputs=["x", "k"],
outputs=["y"],
upper=0,
)
x = np.random.randint(10, size=(4, 5)).astype(np.int64)
k = np.array(6).astype(np.int64)
# X:
# [[4, 7, 3, 7, 9],
# [1, 2, 8, 6, 9],
# [9, 4, 1, 8, 7],
# [4, 3, 4, 2, 4]]
# expect result:
# [[4, 7, 3, 7, 9],
# [1, 2, 8, 6, 9],
# [9, 4, 1, 8, 7],
# [4, 3, 4, 2, 4]]
y = tril_reference_implementation(x, int(k))
expect(node, inputs=[x, k], outputs=[y], name="test_tril_out_pos")
_tril_square
import numpy as np
import onnx
node = onnx.helper.make_node(
"Trilu",
inputs=["x"],
outputs=["y"],
upper=0,
)
x = np.random.randint(10, size=(2, 3, 3)).astype(np.int64)
# X:
# [[[0, 4, 3],
# [2, 0, 9],
# [8, 2, 5]],
#
# [[2, 7, 2],
# [2, 6, 0],
# [2, 6, 5]]]
# expect result:
# [[[0, 0, 0],
# [2, 0, 0],
# [8, 2, 5]],
#
# [[2, 0, 0],
# [2, 6, 0],
# [2, 6, 5]]]
y = tril_reference_implementation(x)
expect(node, inputs=[x], outputs=[y], name="test_tril_square")
_tril_square_neg
import numpy as np
import onnx
node = onnx.helper.make_node(
"Trilu",
inputs=["x", "k"],
outputs=["y"],
upper=0,
)
x = np.random.randint(10, size=(2, 3, 3)).astype(np.int64)
k = np.array(-1).astype(np.int64)
# X:
# [[[0, 4, 3],
# [2, 0, 9],
# [8, 2, 5]],
#
# [[2, 7, 2],
# [2, 6, 0],
# [2, 6, 5]]]
# expect result:
# [[[0, 0, 0],
# [2, 0, 0],
# [8, 2, 0]],
#
# [[0, 0, 0],
# [2, 0, 0],
# [2, 6, 0]]]
y = tril_reference_implementation(x, int(k))
expect(node, inputs=[x, k], outputs=[y], name="test_tril_square_neg")
_tril_one_row
import numpy as np
import onnx
node = onnx.helper.make_node(
"Trilu",
inputs=["x"],
outputs=["y"],
upper=0,
)
x = np.random.randint(10, size=(3, 1, 5)).astype(np.int64)
# X:
# [[[6, 2, 4, 1, 6]],
#
# [[8, 3, 8, 7, 0]],
#
# [[2, 2, 9, 5, 9]]]
# expect result:
# [[[6, 0, 0, 0, 0]],
#
# [[8, 0, 0, 0, 0]],
#
# [[2, 0, 0, 0, 0]]]
y = tril_reference_implementation(x)
expect(node, inputs=[x], outputs=[y], name="test_tril_one_row_neg")
_tril_zero
import numpy as np
import onnx
node = onnx.helper.make_node(
"Trilu",
inputs=["x", "k"],
outputs=["y"],
upper=0,
)
x = np.random.randint(10, size=(3, 0, 5)).astype(np.int64)
k = np.array(6).astype(np.int64)
# X:
# []
# expect result:
# []
y = tril_reference_implementation(x, int(k))
expect(node, inputs=[x, k], outputs=[y], name="test_tril_zero")