forked from OSchip/llvm-project
241 lines
7.5 KiB
Python
241 lines
7.5 KiB
Python
|
# RUN: %PYTHON %s | FileCheck %s
|
||
|
# Note that this is separate from ir_attributes.py since it depends on numpy,
|
||
|
# and we may want to disable if not available.
|
||
|
|
||
|
import gc
|
||
|
from mlir.ir import *
|
||
|
import numpy as np
|
||
|
|
||
|
def run(f):
|
||
|
print("\nTEST:", f.__name__)
|
||
|
f()
|
||
|
gc.collect()
|
||
|
assert Context._get_live_count() == 0
|
||
|
|
||
|
################################################################################
|
||
|
# Tests of the array/buffer .get() factory method on unsupported dtype.
|
||
|
################################################################################
|
||
|
|
||
|
def testGetDenseElementsUnsupported():
|
||
|
with Context():
|
||
|
array = np.array([["hello", "goodbye"]])
|
||
|
try:
|
||
|
attr = DenseElementsAttr.get(array)
|
||
|
except ValueError as e:
|
||
|
# CHECK: unimplemented array format conversion from format:
|
||
|
print(e)
|
||
|
|
||
|
run(testGetDenseElementsUnsupported)
|
||
|
|
||
|
################################################################################
|
||
|
# Splats.
|
||
|
################################################################################
|
||
|
|
||
|
# CHECK-LABEL: TEST: testGetDenseElementsSplatInt
|
||
|
def testGetDenseElementsSplatInt():
|
||
|
with Context(), Location.unknown():
|
||
|
t = IntegerType.get_signless(32)
|
||
|
element = IntegerAttr.get(t, 555)
|
||
|
shaped_type = RankedTensorType.get((2, 3, 4), t)
|
||
|
attr = DenseElementsAttr.get_splat(shaped_type, element)
|
||
|
# CHECK: dense<555> : tensor<2x3x4xi32>
|
||
|
print(attr)
|
||
|
# CHECK: is_splat: True
|
||
|
print("is_splat:", attr.is_splat)
|
||
|
|
||
|
run(testGetDenseElementsSplatInt)
|
||
|
|
||
|
|
||
|
# CHECK-LABEL: TEST: testGetDenseElementsSplatFloat
|
||
|
def testGetDenseElementsSplatFloat():
|
||
|
with Context(), Location.unknown():
|
||
|
t = F32Type.get()
|
||
|
element = FloatAttr.get(t, 1.2)
|
||
|
shaped_type = RankedTensorType.get((2, 3, 4), t)
|
||
|
attr = DenseElementsAttr.get_splat(shaped_type, element)
|
||
|
# CHECK: dense<1.200000e+00> : tensor<2x3x4xf32>
|
||
|
print(attr)
|
||
|
|
||
|
run(testGetDenseElementsSplatFloat)
|
||
|
|
||
|
|
||
|
# CHECK-LABEL: TEST: testGetDenseElementsSplatErrors
|
||
|
def testGetDenseElementsSplatErrors():
|
||
|
with Context(), Location.unknown():
|
||
|
t = F32Type.get()
|
||
|
other_t = F64Type.get()
|
||
|
element = FloatAttr.get(t, 1.2)
|
||
|
other_element = FloatAttr.get(other_t, 1.2)
|
||
|
shaped_type = RankedTensorType.get((2, 3, 4), t)
|
||
|
dynamic_shaped_type = UnrankedTensorType.get(t)
|
||
|
non_shaped_type = t
|
||
|
|
||
|
try:
|
||
|
attr = DenseElementsAttr.get_splat(non_shaped_type, element)
|
||
|
except ValueError as e:
|
||
|
# CHECK: Expected a static ShapedType for the shaped_type parameter: Type(f32)
|
||
|
print(e)
|
||
|
|
||
|
try:
|
||
|
attr = DenseElementsAttr.get_splat(dynamic_shaped_type, element)
|
||
|
except ValueError as e:
|
||
|
# CHECK: Expected a static ShapedType for the shaped_type parameter: Type(tensor<*xf32>)
|
||
|
print(e)
|
||
|
|
||
|
try:
|
||
|
attr = DenseElementsAttr.get_splat(shaped_type, other_element)
|
||
|
except ValueError as e:
|
||
|
# CHECK: Shaped element type and attribute type must be equal: shaped=Type(tensor<2x3x4xf32>), element=Attribute(1.200000e+00 : f64)
|
||
|
print(e)
|
||
|
|
||
|
run(testGetDenseElementsSplatErrors)
|
||
|
|
||
|
|
||
|
################################################################################
|
||
|
# Tests of the array/buffer .get() factory method, in all of its permutations.
|
||
|
################################################################################
|
||
|
|
||
|
### float and double arrays.
|
||
|
|
||
|
# CHECK-LABEL: TEST: testGetDenseElementsF32
|
||
|
def testGetDenseElementsF32():
|
||
|
with Context():
|
||
|
array = np.array([[1.1, 2.2, 3.3], [4.4, 5.5, 6.6]], dtype=np.float32)
|
||
|
attr = DenseElementsAttr.get(array)
|
||
|
# CHECK: dense<{{\[}}[1.100000e+00, 2.200000e+00, 3.300000e+00], [4.400000e+00, 5.500000e+00, 6.600000e+00]]> : tensor<2x3xf32>
|
||
|
print(attr)
|
||
|
# CHECK: is_splat: False
|
||
|
print("is_splat:", attr.is_splat)
|
||
|
# CHECK: {{\[}}[1.1 2.2 3.3]
|
||
|
# CHECK: {{\[}}4.4 5.5 6.6]]
|
||
|
print(np.array(attr))
|
||
|
|
||
|
run(testGetDenseElementsF32)
|
||
|
|
||
|
|
||
|
# CHECK-LABEL: TEST: testGetDenseElementsF64
|
||
|
def testGetDenseElementsF64():
|
||
|
with Context():
|
||
|
array = np.array([[1.1, 2.2, 3.3], [4.4, 5.5, 6.6]], dtype=np.float64)
|
||
|
attr = DenseElementsAttr.get(array)
|
||
|
# CHECK: dense<{{\[}}[1.100000e+00, 2.200000e+00, 3.300000e+00], [4.400000e+00, 5.500000e+00, 6.600000e+00]]> : tensor<2x3xf64>
|
||
|
print(attr)
|
||
|
# CHECK: {{\[}}[1.1 2.2 3.3]
|
||
|
# CHECK: {{\[}}4.4 5.5 6.6]]
|
||
|
print(np.array(attr))
|
||
|
|
||
|
run(testGetDenseElementsF64)
|
||
|
|
||
|
|
||
|
### 32 bit integer arrays
|
||
|
# CHECK-LABEL: TEST: testGetDenseElementsI32Signless
|
||
|
def testGetDenseElementsI32Signless():
|
||
|
with Context():
|
||
|
array = np.array([[1, 2, 3], [4, 5, 6]], dtype=np.int32)
|
||
|
attr = DenseElementsAttr.get(array)
|
||
|
# CHECK: dense<{{\[}}[1, 2, 3], [4, 5, 6]]> : tensor<2x3xi32>
|
||
|
print(attr)
|
||
|
# CHECK: {{\[}}[1 2 3]
|
||
|
# CHECK: {{\[}}4 5 6]]
|
||
|
print(np.array(attr))
|
||
|
|
||
|
run(testGetDenseElementsI32Signless)
|
||
|
|
||
|
|
||
|
# CHECK-LABEL: TEST: testGetDenseElementsUI32Signless
|
||
|
def testGetDenseElementsUI32Signless():
|
||
|
with Context():
|
||
|
array = np.array([[1, 2, 3], [4, 5, 6]], dtype=np.uint32)
|
||
|
attr = DenseElementsAttr.get(array)
|
||
|
# CHECK: dense<{{\[}}[1, 2, 3], [4, 5, 6]]> : tensor<2x3xi32>
|
||
|
print(attr)
|
||
|
# CHECK: {{\[}}[1 2 3]
|
||
|
# CHECK: {{\[}}4 5 6]]
|
||
|
print(np.array(attr))
|
||
|
|
||
|
run(testGetDenseElementsUI32Signless)
|
||
|
|
||
|
# CHECK-LABEL: TEST: testGetDenseElementsI32
|
||
|
def testGetDenseElementsI32():
|
||
|
with Context():
|
||
|
array = np.array([[1, 2, 3], [4, 5, 6]], dtype=np.int32)
|
||
|
attr = DenseElementsAttr.get(array, signless=False)
|
||
|
# CHECK: dense<{{\[}}[1, 2, 3], [4, 5, 6]]> : tensor<2x3xsi32>
|
||
|
print(attr)
|
||
|
# CHECK: {{\[}}[1 2 3]
|
||
|
# CHECK: {{\[}}4 5 6]]
|
||
|
print(np.array(attr))
|
||
|
|
||
|
run(testGetDenseElementsI32)
|
||
|
|
||
|
|
||
|
# CHECK-LABEL: TEST: testGetDenseElementsUI32
|
||
|
def testGetDenseElementsUI32():
|
||
|
with Context():
|
||
|
array = np.array([[1, 2, 3], [4, 5, 6]], dtype=np.uint32)
|
||
|
attr = DenseElementsAttr.get(array, signless=False)
|
||
|
# CHECK: dense<{{\[}}[1, 2, 3], [4, 5, 6]]> : tensor<2x3xui32>
|
||
|
print(attr)
|
||
|
# CHECK: {{\[}}[1 2 3]
|
||
|
# CHECK: {{\[}}4 5 6]]
|
||
|
print(np.array(attr))
|
||
|
|
||
|
run(testGetDenseElementsUI32)
|
||
|
|
||
|
|
||
|
## 64bit integer arrays
|
||
|
# CHECK-LABEL: TEST: testGetDenseElementsI64Signless
|
||
|
def testGetDenseElementsI64Signless():
|
||
|
with Context():
|
||
|
array = np.array([[1, 2, 3], [4, 5, 6]], dtype=np.int64)
|
||
|
attr = DenseElementsAttr.get(array)
|
||
|
# CHECK: dense<{{\[}}[1, 2, 3], [4, 5, 6]]> : tensor<2x3xi64>
|
||
|
print(attr)
|
||
|
# CHECK: {{\[}}[1 2 3]
|
||
|
# CHECK: {{\[}}4 5 6]]
|
||
|
print(np.array(attr))
|
||
|
|
||
|
run(testGetDenseElementsI64Signless)
|
||
|
|
||
|
|
||
|
# CHECK-LABEL: TEST: testGetDenseElementsUI64Signless
|
||
|
def testGetDenseElementsUI64Signless():
|
||
|
with Context():
|
||
|
array = np.array([[1, 2, 3], [4, 5, 6]], dtype=np.uint64)
|
||
|
attr = DenseElementsAttr.get(array)
|
||
|
# CHECK: dense<{{\[}}[1, 2, 3], [4, 5, 6]]> : tensor<2x3xi64>
|
||
|
print(attr)
|
||
|
# CHECK: {{\[}}[1 2 3]
|
||
|
# CHECK: {{\[}}4 5 6]]
|
||
|
print(np.array(attr))
|
||
|
|
||
|
run(testGetDenseElementsUI64Signless)
|
||
|
|
||
|
# CHECK-LABEL: TEST: testGetDenseElementsI64
|
||
|
def testGetDenseElementsI64():
|
||
|
with Context():
|
||
|
array = np.array([[1, 2, 3], [4, 5, 6]], dtype=np.int64)
|
||
|
attr = DenseElementsAttr.get(array, signless=False)
|
||
|
# CHECK: dense<{{\[}}[1, 2, 3], [4, 5, 6]]> : tensor<2x3xsi64>
|
||
|
print(attr)
|
||
|
# CHECK: {{\[}}[1 2 3]
|
||
|
# CHECK: {{\[}}4 5 6]]
|
||
|
print(np.array(attr))
|
||
|
|
||
|
run(testGetDenseElementsI64)
|
||
|
|
||
|
|
||
|
# CHECK-LABEL: TEST: testGetDenseElementsUI64
|
||
|
def testGetDenseElementsUI64():
|
||
|
with Context():
|
||
|
array = np.array([[1, 2, 3], [4, 5, 6]], dtype=np.uint64)
|
||
|
attr = DenseElementsAttr.get(array, signless=False)
|
||
|
# CHECK: dense<{{\[}}[1, 2, 3], [4, 5, 6]]> : tensor<2x3xui64>
|
||
|
print(attr)
|
||
|
# CHECK: {{\[}}[1 2 3]
|
||
|
# CHECK: {{\[}}4 5 6]]
|
||
|
print(np.array(attr))
|
||
|
|
||
|
run(testGetDenseElementsUI64)
|
||
|
|