19f3f6d7bSStella Laurenzo# RUN: %PYTHON %s | FileCheck %s 29f3f6d7bSStella Laurenzo 39f3f6d7bSStella Laurenzoimport gc 4619fd8c2SJeff Niu 59f3f6d7bSStella Laurenzofrom mlir.ir import * 69f3f6d7bSStella Laurenzo 7619fd8c2SJeff Niu 89f3f6d7bSStella Laurenzodef run(f): 99f3f6d7bSStella Laurenzo print("\nTEST:", f.__name__) 109f3f6d7bSStella Laurenzo f() 119f3f6d7bSStella Laurenzo gc.collect() 129f3f6d7bSStella Laurenzo assert Context._get_live_count() == 0 139f3f6d7bSStella Laurenzo return f 149f3f6d7bSStella Laurenzo 159f3f6d7bSStella Laurenzo 169f3f6d7bSStella Laurenzo# CHECK-LABEL: TEST: testParsePrint 179f3f6d7bSStella Laurenzo@run 189f3f6d7bSStella Laurenzodef testParsePrint(): 199f3f6d7bSStella Laurenzo with Context() as ctx: 209f3f6d7bSStella Laurenzo t = Attribute.parse('"hello"') 219f3f6d7bSStella Laurenzo assert t.context is ctx 229f3f6d7bSStella Laurenzo ctx = None 239f3f6d7bSStella Laurenzo gc.collect() 249f533548SIngo Müller # CHECK: "hello" 259f3f6d7bSStella Laurenzo print(str(t)) 269566ee28Smax # CHECK: StringAttr("hello") 279f3f6d7bSStella Laurenzo print(repr(t)) 289f3f6d7bSStella Laurenzo 299f3f6d7bSStella Laurenzo 309f3f6d7bSStella Laurenzo# CHECK-LABEL: TEST: testParseError 319f3f6d7bSStella Laurenzo@run 329f3f6d7bSStella Laurenzodef testParseError(): 339f3f6d7bSStella Laurenzo with Context(): 349f3f6d7bSStella Laurenzo try: 359f3f6d7bSStella Laurenzo t = Attribute.parse("BAD_ATTR_DOES_NOT_EXIST") 363ea4c501SRahul Kayaith except MLIRError as e: 373ea4c501SRahul Kayaith # CHECK: testParseError: < 383ea4c501SRahul Kayaith # CHECK: Unable to parse attribute: 393ea4c501SRahul Kayaith # CHECK: error: "BAD_ATTR_DOES_NOT_EXIST":1:1: expected attribute value 403ea4c501SRahul Kayaith # CHECK: > 413ea4c501SRahul Kayaith print(f"testParseError: <{e}>") 429f3f6d7bSStella Laurenzo else: 439f3f6d7bSStella Laurenzo print("Exception not produced") 449f3f6d7bSStella Laurenzo 459f3f6d7bSStella Laurenzo 469f3f6d7bSStella Laurenzo# CHECK-LABEL: TEST: testAttrEq 479f3f6d7bSStella Laurenzo@run 489f3f6d7bSStella Laurenzodef testAttrEq(): 499f3f6d7bSStella Laurenzo with Context(): 509f3f6d7bSStella Laurenzo a1 = Attribute.parse('"attr1"') 519f3f6d7bSStella Laurenzo a2 = Attribute.parse('"attr2"') 529f3f6d7bSStella Laurenzo a3 = Attribute.parse('"attr1"') 539f3f6d7bSStella Laurenzo # CHECK: a1 == a1: True 549f3f6d7bSStella Laurenzo print("a1 == a1:", a1 == a1) 559f3f6d7bSStella Laurenzo # CHECK: a1 == a2: False 569f3f6d7bSStella Laurenzo print("a1 == a2:", a1 == a2) 579f3f6d7bSStella Laurenzo # CHECK: a1 == a3: True 589f3f6d7bSStella Laurenzo print("a1 == a3:", a1 == a3) 59fd45dccaSEisuke Kawashima # CHECK: a1 is None: False 60fd45dccaSEisuke Kawashima print("a1 is None:", a1 is None) 619f3f6d7bSStella Laurenzo 629f3f6d7bSStella Laurenzo 6347cc166bSJohn Demme# CHECK-LABEL: TEST: testAttrHash 6447cc166bSJohn Demme@run 6547cc166bSJohn Demmedef testAttrHash(): 6647cc166bSJohn Demme with Context(): 6747cc166bSJohn Demme a1 = Attribute.parse('"attr1"') 6847cc166bSJohn Demme a2 = Attribute.parse('"attr2"') 6947cc166bSJohn Demme a3 = Attribute.parse('"attr1"') 7047cc166bSJohn Demme # CHECK: hash(a1) == hash(a3): True 7147cc166bSJohn Demme print("hash(a1) == hash(a3):", a1.__hash__() == a3.__hash__()) 7247cc166bSJohn Demme 7347cc166bSJohn Demme s = set() 7447cc166bSJohn Demme s.add(a1) 7547cc166bSJohn Demme s.add(a2) 7647cc166bSJohn Demme s.add(a3) 7747cc166bSJohn Demme # CHECK: len(s): 2 7847cc166bSJohn Demme print("len(s): ", len(s)) 7947cc166bSJohn Demme 8047cc166bSJohn Demme 819f3f6d7bSStella Laurenzo# CHECK-LABEL: TEST: testAttrCast 829f3f6d7bSStella Laurenzo@run 839f3f6d7bSStella Laurenzodef testAttrCast(): 849f3f6d7bSStella Laurenzo with Context(): 859f3f6d7bSStella Laurenzo a1 = Attribute.parse('"attr1"') 869f3f6d7bSStella Laurenzo a2 = Attribute(a1) 879f3f6d7bSStella Laurenzo # CHECK: a1 == a2: True 889f3f6d7bSStella Laurenzo print("a1 == a2:", a1 == a2) 899f3f6d7bSStella Laurenzo 909f3f6d7bSStella Laurenzo 9178f2dae0SAlex Zinenko# CHECK-LABEL: TEST: testAttrIsInstance 9278f2dae0SAlex Zinenko@run 9378f2dae0SAlex Zinenkodef testAttrIsInstance(): 9478f2dae0SAlex Zinenko with Context(): 9578f2dae0SAlex Zinenko a1 = Attribute.parse("42") 9678f2dae0SAlex Zinenko a2 = Attribute.parse("[42]") 9778f2dae0SAlex Zinenko assert IntegerAttr.isinstance(a1) 9878f2dae0SAlex Zinenko assert not IntegerAttr.isinstance(a2) 9978f2dae0SAlex Zinenko assert not ArrayAttr.isinstance(a1) 10078f2dae0SAlex Zinenko assert ArrayAttr.isinstance(a2) 10178f2dae0SAlex Zinenko 10278f2dae0SAlex Zinenko 1039f3f6d7bSStella Laurenzo# CHECK-LABEL: TEST: testAttrEqDoesNotRaise 1049f3f6d7bSStella Laurenzo@run 1059f3f6d7bSStella Laurenzodef testAttrEqDoesNotRaise(): 1069f3f6d7bSStella Laurenzo with Context(): 1079f3f6d7bSStella Laurenzo a1 = Attribute.parse('"attr1"') 1089f3f6d7bSStella Laurenzo not_an_attr = "foo" 1099f3f6d7bSStella Laurenzo # CHECK: False 1109f3f6d7bSStella Laurenzo print(a1 == not_an_attr) 1119f3f6d7bSStella Laurenzo # CHECK: False 112fd45dccaSEisuke Kawashima print(a1 is None) 1139f3f6d7bSStella Laurenzo # CHECK: True 114fd45dccaSEisuke Kawashima print(a1 is not None) 1159f3f6d7bSStella Laurenzo 1169f3f6d7bSStella Laurenzo 1179f3f6d7bSStella Laurenzo# CHECK-LABEL: TEST: testAttrCapsule 1189f3f6d7bSStella Laurenzo@run 1199f3f6d7bSStella Laurenzodef testAttrCapsule(): 1209f3f6d7bSStella Laurenzo with Context() as ctx: 1219f3f6d7bSStella Laurenzo a1 = Attribute.parse('"attr1"') 1229f3f6d7bSStella Laurenzo # CHECK: mlir.ir.Attribute._CAPIPtr 1239f3f6d7bSStella Laurenzo attr_capsule = a1._CAPIPtr 1249f3f6d7bSStella Laurenzo print(attr_capsule) 1259f3f6d7bSStella Laurenzo a2 = Attribute._CAPICreate(attr_capsule) 1269f3f6d7bSStella Laurenzo assert a2 == a1 1279f3f6d7bSStella Laurenzo assert a2.context is ctx 1289f3f6d7bSStella Laurenzo 1299f3f6d7bSStella Laurenzo 1309f3f6d7bSStella Laurenzo# CHECK-LABEL: TEST: testStandardAttrCasts 1319f3f6d7bSStella Laurenzo@run 1329f3f6d7bSStella Laurenzodef testStandardAttrCasts(): 1339f3f6d7bSStella Laurenzo with Context(): 1349f3f6d7bSStella Laurenzo a1 = Attribute.parse('"attr1"') 1359f3f6d7bSStella Laurenzo astr = StringAttr(a1) 1369f3f6d7bSStella Laurenzo aself = StringAttr(astr) 1379566ee28Smax # CHECK: StringAttr("attr1") 1389f3f6d7bSStella Laurenzo print(repr(astr)) 1399f3f6d7bSStella Laurenzo try: 1409f3f6d7bSStella Laurenzo tillegal = StringAttr(Attribute.parse("1.0")) 1419f3f6d7bSStella Laurenzo except ValueError as e: 1429f3f6d7bSStella Laurenzo # CHECK: ValueError: Cannot cast attribute to StringAttr (from Attribute(1.000000e+00 : f64)) 1439f3f6d7bSStella Laurenzo print("ValueError:", e) 1449f3f6d7bSStella Laurenzo else: 1459f3f6d7bSStella Laurenzo print("Exception not produced") 1469f3f6d7bSStella Laurenzo 1479f3f6d7bSStella Laurenzo 1489f3f6d7bSStella Laurenzo# CHECK-LABEL: TEST: testAffineMapAttr 1499f3f6d7bSStella Laurenzo@run 1509f3f6d7bSStella Laurenzodef testAffineMapAttr(): 1519f3f6d7bSStella Laurenzo with Context() as ctx: 1529f3f6d7bSStella Laurenzo d0 = AffineDimExpr.get(0) 1539f3f6d7bSStella Laurenzo d1 = AffineDimExpr.get(1) 1549f3f6d7bSStella Laurenzo c2 = AffineConstantExpr.get(2) 1559f3f6d7bSStella Laurenzo map0 = AffineMap.get(2, 3, []) 1569f3f6d7bSStella Laurenzo 1579f3f6d7bSStella Laurenzo # CHECK: affine_map<(d0, d1)[s0, s1, s2] -> ()> 1589f3f6d7bSStella Laurenzo attr_built = AffineMapAttr.get(map0) 1599f3f6d7bSStella Laurenzo print(str(attr_built)) 160c36b4248SBimo assert attr_built.value == map0 1619f3f6d7bSStella Laurenzo attr_parsed = Attribute.parse(str(attr_built)) 1629f3f6d7bSStella Laurenzo assert attr_built == attr_parsed 1639f3f6d7bSStella Laurenzo 1649f3f6d7bSStella Laurenzo 165334873feSAmy Wang# CHECK-LABEL: TEST: testIntegerSetAttr 166334873feSAmy Wang@run 167334873feSAmy Wangdef testIntegerSetAttr(): 168334873feSAmy Wang with Context() as ctx: 169334873feSAmy Wang d0 = AffineDimExpr.get(0) 170334873feSAmy Wang d1 = AffineDimExpr.get(1) 171334873feSAmy Wang s0 = AffineSymbolExpr.get(0) 172334873feSAmy Wang c42 = AffineConstantExpr.get(42) 173334873feSAmy Wang set0 = IntegerSet.get(2, 1, [d0 - d1, s0 - c42], [True, False]) 174334873feSAmy Wang 175334873feSAmy Wang # CHECK: affine_set<(d0, d1)[s0] : (d0 - d1 == 0, s0 - 42 >= 0)> 176334873feSAmy Wang attr_built = IntegerSetAttr.get(set0) 177334873feSAmy Wang print(str(attr_built)) 178334873feSAmy Wang 179334873feSAmy Wang attr_parsed = Attribute.parse(str(attr_built)) 180334873feSAmy Wang assert attr_built == attr_parsed 181334873feSAmy Wang 182334873feSAmy Wang 1839f3f6d7bSStella Laurenzo# CHECK-LABEL: TEST: testFloatAttr 1849f3f6d7bSStella Laurenzo@run 1859f3f6d7bSStella Laurenzodef testFloatAttr(): 1869f3f6d7bSStella Laurenzo with Context(), Location.unknown(): 1879f3f6d7bSStella Laurenzo fattr = FloatAttr(Attribute.parse("42.0 : f32")) 1889f3f6d7bSStella Laurenzo # CHECK: fattr value: 42.0 1899f3f6d7bSStella Laurenzo print("fattr value:", fattr.value) 1902a5d4974SIngo Müller # CHECK: fattr float: 42.0 <class 'float'> 1912a5d4974SIngo Müller print("fattr float:", float(fattr), type(float(fattr))) 1929f3f6d7bSStella Laurenzo 1939f3f6d7bSStella Laurenzo # Test factory methods. 1949f3f6d7bSStella Laurenzo # CHECK: default_get: 4.200000e+01 : f32 195f9008e63STobias Hieta print("default_get:", FloatAttr.get(F32Type.get(), 42.0)) 1969f3f6d7bSStella Laurenzo # CHECK: f32_get: 4.200000e+01 : f32 1979f3f6d7bSStella Laurenzo print("f32_get:", FloatAttr.get_f32(42.0)) 1989f3f6d7bSStella Laurenzo # CHECK: f64_get: 4.200000e+01 : f64 1999f3f6d7bSStella Laurenzo print("f64_get:", FloatAttr.get_f64(42.0)) 2009f3f6d7bSStella Laurenzo try: 201f9008e63STobias Hieta fattr_invalid = FloatAttr.get(IntegerType.get_signless(32), 42) 2023ea4c501SRahul Kayaith except MLIRError as e: 2033ea4c501SRahul Kayaith # CHECK: Invalid attribute: 2043ea4c501SRahul Kayaith # CHECK: error: unknown: expected floating point type 2059f3f6d7bSStella Laurenzo print(e) 2069f3f6d7bSStella Laurenzo else: 2079f3f6d7bSStella Laurenzo print("Exception not produced") 2089f3f6d7bSStella Laurenzo 2099f3f6d7bSStella Laurenzo 2109f3f6d7bSStella Laurenzo# CHECK-LABEL: TEST: testIntegerAttr 2119f3f6d7bSStella Laurenzo@run 2129f3f6d7bSStella Laurenzodef testIntegerAttr(): 2139f3f6d7bSStella Laurenzo with Context() as ctx: 214e9db306dSrkayaith i_attr = IntegerAttr(Attribute.parse("42")) 215e9db306dSrkayaith # CHECK: i_attr value: 42 216e9db306dSrkayaith print("i_attr value:", i_attr.value) 217e9db306dSrkayaith # CHECK: i_attr type: i64 218e9db306dSrkayaith print("i_attr type:", i_attr.type) 2192a5d4974SIngo Müller # CHECK: i_attr int: 42 <class 'int'> 2202a5d4974SIngo Müller print("i_attr int:", int(i_attr), type(int(i_attr))) 221e9db306dSrkayaith si_attr = IntegerAttr(Attribute.parse("-1 : si8")) 222e9db306dSrkayaith # CHECK: si_attr value: -1 223e9db306dSrkayaith print("si_attr value:", si_attr.value) 224e9db306dSrkayaith ui_attr = IntegerAttr(Attribute.parse("255 : ui8")) 2252a5d4974SIngo Müller # CHECK: i_attr int: -1 <class 'int'> 2262a5d4974SIngo Müller print("si_attr int:", int(si_attr), type(int(si_attr))) 227e9db306dSrkayaith # CHECK: ui_attr value: 255 228e9db306dSrkayaith print("ui_attr value:", ui_attr.value) 2292a5d4974SIngo Müller # CHECK: i_attr int: 255 <class 'int'> 2302a5d4974SIngo Müller print("ui_attr int:", int(ui_attr), type(int(ui_attr))) 231e9db306dSrkayaith idx_attr = IntegerAttr(Attribute.parse("-1 : index")) 232e9db306dSrkayaith # CHECK: idx_attr value: -1 233e9db306dSrkayaith print("idx_attr value:", idx_attr.value) 2342a5d4974SIngo Müller # CHECK: idx_attr int: -1 <class 'int'> 2352a5d4974SIngo Müller print("idx_attr int:", int(idx_attr), type(int(idx_attr))) 2369f3f6d7bSStella Laurenzo 2379f3f6d7bSStella Laurenzo # Test factory methods. 2389f3f6d7bSStella Laurenzo # CHECK: default_get: 42 : i32 239f9008e63STobias Hieta print("default_get:", IntegerAttr.get(IntegerType.get_signless(32), 42)) 2409f3f6d7bSStella Laurenzo 2419f3f6d7bSStella Laurenzo 2429f3f6d7bSStella Laurenzo# CHECK-LABEL: TEST: testBoolAttr 2439f3f6d7bSStella Laurenzo@run 2449f3f6d7bSStella Laurenzodef testBoolAttr(): 2459f3f6d7bSStella Laurenzo with Context() as ctx: 2469f3f6d7bSStella Laurenzo battr = BoolAttr(Attribute.parse("true")) 2479f3f6d7bSStella Laurenzo # CHECK: iattr value: True 2489f3f6d7bSStella Laurenzo print("iattr value:", battr.value) 2492a5d4974SIngo Müller # CHECK: iattr bool: True <class 'bool'> 2502a5d4974SIngo Müller print("iattr bool:", bool(battr), type(bool(battr))) 2519f3f6d7bSStella Laurenzo 2529f3f6d7bSStella Laurenzo # Test factory methods. 2539f3f6d7bSStella Laurenzo # CHECK: default_get: true 2549f3f6d7bSStella Laurenzo print("default_get:", BoolAttr.get(True)) 2559f3f6d7bSStella Laurenzo 2569f3f6d7bSStella Laurenzo 2579f3f6d7bSStella Laurenzo# CHECK-LABEL: TEST: testFlatSymbolRefAttr 2589f3f6d7bSStella Laurenzo@run 2599f3f6d7bSStella Laurenzodef testFlatSymbolRefAttr(): 2609f3f6d7bSStella Laurenzo with Context() as ctx: 2614eee9ef9Smax sattr = Attribute.parse("@symbol") 2629f3f6d7bSStella Laurenzo # CHECK: symattr value: symbol 2639f3f6d7bSStella Laurenzo print("symattr value:", sattr.value) 2649f3f6d7bSStella Laurenzo 2659f3f6d7bSStella Laurenzo # Test factory methods. 2669f3f6d7bSStella Laurenzo # CHECK: default_get: @foobar 2679f3f6d7bSStella Laurenzo print("default_get:", FlatSymbolRefAttr.get("foobar")) 2689f3f6d7bSStella Laurenzo 2699f3f6d7bSStella Laurenzo 2704eee9ef9Smax# CHECK-LABEL: TEST: testSymbolRefAttr 2714eee9ef9Smax@run 2724eee9ef9Smaxdef testSymbolRefAttr(): 2734eee9ef9Smax with Context() as ctx: 2744eee9ef9Smax sattr = Attribute.parse("@symbol1::@symbol2") 2754eee9ef9Smax # CHECK: symattr value: ['symbol1', 'symbol2'] 2764eee9ef9Smax print("symattr value:", sattr.value) 2774eee9ef9Smax 2784eee9ef9Smax # CHECK: default_get: @symbol1::@symbol2 2794eee9ef9Smax print("default_get:", SymbolRefAttr.get(["symbol1", "symbol2"])) 2804eee9ef9Smax 2814eee9ef9Smax # CHECK: default_get: @"@symbol1"::@"@symbol2" 2824eee9ef9Smax print("default_get:", SymbolRefAttr.get(["@symbol1", "@symbol2"])) 2834eee9ef9Smax 2844eee9ef9Smax 2855c3861b2SYun Long# CHECK-LABEL: TEST: testOpaqueAttr 2865c3861b2SYun Long@run 2875c3861b2SYun Longdef testOpaqueAttr(): 2885c3861b2SYun Long with Context() as ctx: 2895c3861b2SYun Long ctx.allow_unregistered_dialects = True 2905c3861b2SYun Long oattr = OpaqueAttr(Attribute.parse("#pytest_dummy.dummyattr<>")) 2915c3861b2SYun Long # CHECK: oattr value: pytest_dummy 2925c3861b2SYun Long print("oattr value:", oattr.dialect_namespace) 29362bf6c2eSChris Jones # CHECK: oattr value: b'dummyattr<>' 2945c3861b2SYun Long print("oattr value:", oattr.data) 2955c3861b2SYun Long 2965c3861b2SYun Long # Test factory methods. 297ab9cdf09SRiver Riddle # CHECK: default_get: #foobar<123> 2985c3861b2SYun Long print( 2995c3861b2SYun Long "default_get:", 300f9008e63STobias Hieta OpaqueAttr.get("foobar", bytes("123", "utf-8"), NoneType.get()), 301f9008e63STobias Hieta ) 3025c3861b2SYun Long 3035c3861b2SYun Long 3049f3f6d7bSStella Laurenzo# CHECK-LABEL: TEST: testStringAttr 3059f3f6d7bSStella Laurenzo@run 3069f3f6d7bSStella Laurenzodef testStringAttr(): 3079f3f6d7bSStella Laurenzo with Context() as ctx: 3089f3f6d7bSStella Laurenzo sattr = StringAttr(Attribute.parse('"stringattr"')) 3099f3f6d7bSStella Laurenzo # CHECK: sattr value: stringattr 3109f3f6d7bSStella Laurenzo print("sattr value:", sattr.value) 3119f533548SIngo Müller # CHECK: sattr value: b'stringattr' 3129f533548SIngo Müller print("sattr value:", sattr.value_bytes) 3139f3f6d7bSStella Laurenzo 3149f3f6d7bSStella Laurenzo # Test factory methods. 3159f533548SIngo Müller # CHECK: default_get: "foobar" 3169f533548SIngo Müller print("default_get:", StringAttr.get("foobar")) 3179f533548SIngo Müller # CHECK: typed_get: "12345" : i32 3189f533548SIngo Müller print("typed_get:", StringAttr.get_typed(IntegerType.get_signless(32), "12345")) 3199f3f6d7bSStella Laurenzo 3209f3f6d7bSStella Laurenzo 3219f3f6d7bSStella Laurenzo# CHECK-LABEL: TEST: testNamedAttr 3229f3f6d7bSStella Laurenzo@run 3239f3f6d7bSStella Laurenzodef testNamedAttr(): 3249f3f6d7bSStella Laurenzo with Context(): 3259f3f6d7bSStella Laurenzo a = Attribute.parse('"stringattr"') 3269f3f6d7bSStella Laurenzo named = a.get_named("foobar") # Note: under the small object threshold 3279f533548SIngo Müller # CHECK: attr: "stringattr" 3289f533548SIngo Müller print("attr:", named.attr) 3299f3f6d7bSStella Laurenzo # CHECK: name: foobar 3309f3f6d7bSStella Laurenzo print("name:", named.name) 3319f3f6d7bSStella Laurenzo # CHECK: named: NamedAttribute(foobar="stringattr") 3329f3f6d7bSStella Laurenzo print("named:", named) 3339f3f6d7bSStella Laurenzo 3349f3f6d7bSStella Laurenzo 3359f3f6d7bSStella Laurenzo# CHECK-LABEL: TEST: testDenseIntAttr 3369f3f6d7bSStella Laurenzo@run 3379f3f6d7bSStella Laurenzodef testDenseIntAttr(): 3389f3f6d7bSStella Laurenzo with Context(): 3399f3f6d7bSStella Laurenzo raw = Attribute.parse("dense<[[0,1,2],[3,4,5]]> : vector<2x3xi32>") 3409f3f6d7bSStella Laurenzo # CHECK: attr: dense<[{{\[}}0, 1, 2], [3, 4, 5]]> 3419f3f6d7bSStella Laurenzo print("attr:", raw) 3429f3f6d7bSStella Laurenzo 3439f3f6d7bSStella Laurenzo a = DenseIntElementsAttr(raw) 3449f3f6d7bSStella Laurenzo assert len(a) == 6 3459f3f6d7bSStella Laurenzo 3469f3f6d7bSStella Laurenzo # CHECK: 0 1 2 3 4 5 3479f3f6d7bSStella Laurenzo for value in a: 3489f3f6d7bSStella Laurenzo print(value, end=" ") 3499f3f6d7bSStella Laurenzo print() 3509f3f6d7bSStella Laurenzo 3519f3f6d7bSStella Laurenzo # CHECK: i32 3529f3f6d7bSStella Laurenzo print(ShapedType(a.type).element_type) 3539f3f6d7bSStella Laurenzo 3549f3f6d7bSStella Laurenzo raw = Attribute.parse("dense<[true,false,true,false]> : vector<4xi1>") 3559f3f6d7bSStella Laurenzo # CHECK: attr: dense<[true, false, true, false]> 3569f3f6d7bSStella Laurenzo print("attr:", raw) 3579f3f6d7bSStella Laurenzo 3589f3f6d7bSStella Laurenzo a = DenseIntElementsAttr(raw) 3599f3f6d7bSStella Laurenzo assert len(a) == 4 3609f3f6d7bSStella Laurenzo 3619f3f6d7bSStella Laurenzo # CHECK: 1 0 1 0 3629f3f6d7bSStella Laurenzo for value in a: 3639f3f6d7bSStella Laurenzo print(value, end=" ") 3649f3f6d7bSStella Laurenzo print() 3659f3f6d7bSStella Laurenzo 3669f3f6d7bSStella Laurenzo # CHECK: i1 3679f3f6d7bSStella Laurenzo print(ShapedType(a.type).element_type) 3689f3f6d7bSStella Laurenzo 369*5d3ae516SMatthias Gehre shape = Attribute.parse("dense<[0, 1, 2, 3]> : vector<4xindex>") 370*5d3ae516SMatthias Gehre # CHECK: attr: dense<[0, 1, 2, 3]> 371*5d3ae516SMatthias Gehre print("attr:", shape) 372*5d3ae516SMatthias Gehre 3739f3f6d7bSStella Laurenzo 374619fd8c2SJeff Niu@run 375619fd8c2SJeff Niudef testDenseArrayGetItem(): 3769566ee28Smax def print_item(attr_asm): 3779566ee28Smax attr = Attribute.parse(attr_asm) 378619fd8c2SJeff Niu print(f"{len(attr)}: {attr[0]}, {attr[1]}") 379619fd8c2SJeff Niu 380619fd8c2SJeff Niu with Context(): 3818dcb6722SIngo Müller # CHECK: 2: False, True 3829566ee28Smax print_item("array<i1: false, true>") 383619fd8c2SJeff Niu # CHECK: 2: 2, 3 3849566ee28Smax print_item("array<i8: 2, 3>") 385619fd8c2SJeff Niu # CHECK: 2: 4, 5 3869566ee28Smax print_item("array<i16: 4, 5>") 387619fd8c2SJeff Niu # CHECK: 2: 6, 7 3889566ee28Smax print_item("array<i32: 6, 7>") 389619fd8c2SJeff Niu # CHECK: 2: 8, 9 3909566ee28Smax print_item("array<i64: 8, 9>") 391619fd8c2SJeff Niu # CHECK: 2: 1.{{0+}}, 2.{{0+}} 3929566ee28Smax print_item("array<f32: 1.0, 2.0>") 393619fd8c2SJeff Niu # CHECK: 2: 3.{{0+}}, 4.{{0+}} 3949566ee28Smax print_item("array<f64: 3.0, 4.0>") 395619fd8c2SJeff Niu 3968dcb6722SIngo Müller class MyBool: 3978dcb6722SIngo Müller def __bool__(self): 3988dcb6722SIngo Müller return True 3998dcb6722SIngo Müller 4008dcb6722SIngo Müller # CHECK: myboolarray: array<i1: true> 4018dcb6722SIngo Müller print("myboolarray:", DenseBoolArrayAttr.get([MyBool()])) 4028dcb6722SIngo Müller 403619fd8c2SJeff Niu 4042a5d4974SIngo Müller# CHECK-LABEL: TEST: testDenseArrayAttrConstruction 4052a5d4974SIngo Müller@run 4062a5d4974SIngo Müllerdef testDenseArrayAttrConstruction(): 4072a5d4974SIngo Müller with Context(), Location.unknown(): 4082a5d4974SIngo Müller 4092a5d4974SIngo Müller def create_and_print(cls, x): 4102a5d4974SIngo Müller try: 4112a5d4974SIngo Müller darr = cls.get(x) 4122a5d4974SIngo Müller print(f"input: {x} ({type(x)}), result: {darr}") 4132a5d4974SIngo Müller except Exception as ex: 4142a5d4974SIngo Müller print(f"input: {x} ({type(x)}), error: {ex}") 4152a5d4974SIngo Müller 4162a5d4974SIngo Müller # CHECK: input: [4, 2] (<class 'list'>), 4172a5d4974SIngo Müller # CHECK-SAME: result: array<i8: 4, 2> 4182a5d4974SIngo Müller create_and_print(DenseI8ArrayAttr, [4, 2]) 4192a5d4974SIngo Müller 4202a5d4974SIngo Müller # CHECK: input: [4, 2.0] (<class 'list'>), 4212a5d4974SIngo Müller # CHECK-SAME: error: get(): incompatible function arguments 4222a5d4974SIngo Müller create_and_print(DenseI8ArrayAttr, [4, 2.0]) 4232a5d4974SIngo Müller 4242a5d4974SIngo Müller # CHECK: input: [40000, 2] (<class 'list'>), 4252a5d4974SIngo Müller # CHECK-SAME: error: get(): incompatible function arguments 4262a5d4974SIngo Müller create_and_print(DenseI8ArrayAttr, [40000, 2]) 4272a5d4974SIngo Müller 4282a5d4974SIngo Müller # CHECK: input: range(0, 4) (<class 'range'>), 4292a5d4974SIngo Müller # CHECK-SAME: result: array<i8: 0, 1, 2, 3> 4302a5d4974SIngo Müller create_and_print(DenseI8ArrayAttr, range(4)) 4312a5d4974SIngo Müller 4322a5d4974SIngo Müller # CHECK: input: [IntegerAttr(4 : i64), IntegerAttr(2 : i64)] (<class 'list'>), 4332a5d4974SIngo Müller # CHECK-SAME: result: array<i8: 4, 2> 4342a5d4974SIngo Müller create_and_print(DenseI8ArrayAttr, [Attribute.parse(f"{x}") for x in [4, 2]]) 4352a5d4974SIngo Müller 4362a5d4974SIngo Müller # CHECK: input: [IntegerAttr(4000 : i64), IntegerAttr(2 : i64)] (<class 'list'>), 4372a5d4974SIngo Müller # CHECK-SAME: error: get(): incompatible function arguments 4382a5d4974SIngo Müller create_and_print(DenseI8ArrayAttr, [Attribute.parse(f"{x}") for x in [4000, 2]]) 4392a5d4974SIngo Müller 4402a5d4974SIngo Müller # CHECK: input: [IntegerAttr(4 : i64), FloatAttr(2.000000e+00 : f64)] (<class 'list'>), 4412a5d4974SIngo Müller # CHECK-SAME: error: get(): incompatible function arguments 4422a5d4974SIngo Müller create_and_print(DenseI8ArrayAttr, [Attribute.parse(f"{x}") for x in [4, 2.0]]) 4432a5d4974SIngo Müller 4442a5d4974SIngo Müller # CHECK: input: [IntegerAttr(4 : i8), IntegerAttr(2 : ui16)] (<class 'list'>), 4452a5d4974SIngo Müller # CHECK-SAME: result: array<i8: 4, 2> 4462a5d4974SIngo Müller create_and_print( 4472a5d4974SIngo Müller DenseI8ArrayAttr, [Attribute.parse(s) for s in ["4 : i8", "2 : ui16"]] 4482a5d4974SIngo Müller ) 4492a5d4974SIngo Müller 4502a5d4974SIngo Müller # CHECK: input: [FloatAttr(4.000000e+00 : f64), FloatAttr(2.000000e+00 : f64)] (<class 'list'>) 4512a5d4974SIngo Müller # CHECK-SAME: result: array<f32: 4.000000e+00, 2.000000e+00> 4522a5d4974SIngo Müller create_and_print( 4532a5d4974SIngo Müller DenseF32ArrayAttr, [Attribute.parse(f"{x}") for x in [4.0, 2.0]] 4542a5d4974SIngo Müller ) 4552a5d4974SIngo Müller 4562a5d4974SIngo Müller # CHECK: [BoolAttr(true), BoolAttr(false)] (<class 'list'>), 4572a5d4974SIngo Müller # CHECK-SAME: result: array<i1: true, false> 4582a5d4974SIngo Müller create_and_print( 4592a5d4974SIngo Müller DenseBoolArrayAttr, [Attribute.parse(f"{x}") for x in ["true", "false"]] 4602a5d4974SIngo Müller ) 4612a5d4974SIngo Müller 4622a5d4974SIngo Müller 463308d8b8cSRahul Kayaith# CHECK-LABEL: TEST: testDenseIntAttrGetItem 464308d8b8cSRahul Kayaith@run 465308d8b8cSRahul Kayaithdef testDenseIntAttrGetItem(): 466308d8b8cSRahul Kayaith def print_item(attr_asm): 4679566ee28Smax attr = Attribute.parse(attr_asm) 468308d8b8cSRahul Kayaith dtype = ShapedType(attr.type).element_type 469308d8b8cSRahul Kayaith try: 470308d8b8cSRahul Kayaith item = attr[0] 471308d8b8cSRahul Kayaith print(f"{dtype}:", item) 472308d8b8cSRahul Kayaith except TypeError as e: 473308d8b8cSRahul Kayaith print(f"{dtype}:", e) 474308d8b8cSRahul Kayaith 475308d8b8cSRahul Kayaith with Context(): 476308d8b8cSRahul Kayaith # CHECK: i1: 1 477308d8b8cSRahul Kayaith print_item("dense<true> : tensor<i1>") 478308d8b8cSRahul Kayaith # CHECK: i8: 123 479308d8b8cSRahul Kayaith print_item("dense<123> : tensor<i8>") 480308d8b8cSRahul Kayaith # CHECK: i16: 123 481308d8b8cSRahul Kayaith print_item("dense<123> : tensor<i16>") 482308d8b8cSRahul Kayaith # CHECK: i32: 123 483308d8b8cSRahul Kayaith print_item("dense<123> : tensor<i32>") 484308d8b8cSRahul Kayaith # CHECK: i64: 123 485308d8b8cSRahul Kayaith print_item("dense<123> : tensor<i64>") 486308d8b8cSRahul Kayaith # CHECK: ui8: 123 487308d8b8cSRahul Kayaith print_item("dense<123> : tensor<ui8>") 488308d8b8cSRahul Kayaith # CHECK: ui16: 123 489308d8b8cSRahul Kayaith print_item("dense<123> : tensor<ui16>") 490308d8b8cSRahul Kayaith # CHECK: ui32: 123 491308d8b8cSRahul Kayaith print_item("dense<123> : tensor<ui32>") 492308d8b8cSRahul Kayaith # CHECK: ui64: 123 493308d8b8cSRahul Kayaith print_item("dense<123> : tensor<ui64>") 494308d8b8cSRahul Kayaith # CHECK: si8: -123 495308d8b8cSRahul Kayaith print_item("dense<-123> : tensor<si8>") 496308d8b8cSRahul Kayaith # CHECK: si16: -123 497308d8b8cSRahul Kayaith print_item("dense<-123> : tensor<si16>") 498308d8b8cSRahul Kayaith # CHECK: si32: -123 499308d8b8cSRahul Kayaith print_item("dense<-123> : tensor<si32>") 500308d8b8cSRahul Kayaith # CHECK: si64: -123 501308d8b8cSRahul Kayaith print_item("dense<-123> : tensor<si64>") 502308d8b8cSRahul Kayaith 503308d8b8cSRahul Kayaith # CHECK: i7: Unsupported integer type 504308d8b8cSRahul Kayaith print_item("dense<123> : tensor<i7>") 505308d8b8cSRahul Kayaith 506308d8b8cSRahul Kayaith 5079f3f6d7bSStella Laurenzo# CHECK-LABEL: TEST: testDenseFPAttr 5089f3f6d7bSStella Laurenzo@run 5099f3f6d7bSStella Laurenzodef testDenseFPAttr(): 5109f3f6d7bSStella Laurenzo with Context(): 5119f3f6d7bSStella Laurenzo raw = Attribute.parse("dense<[0.0, 1.0, 2.0, 3.0]> : vector<4xf32>") 5129f3f6d7bSStella Laurenzo # CHECK: attr: dense<[0.000000e+00, 1.000000e+00, 2.000000e+00, 3.000000e+00]> 5139f3f6d7bSStella Laurenzo 5149f3f6d7bSStella Laurenzo print("attr:", raw) 5159f3f6d7bSStella Laurenzo 5169f3f6d7bSStella Laurenzo a = DenseFPElementsAttr(raw) 5179f3f6d7bSStella Laurenzo assert len(a) == 4 5189f3f6d7bSStella Laurenzo 5199f3f6d7bSStella Laurenzo # CHECK: 0.0 1.0 2.0 3.0 5209f3f6d7bSStella Laurenzo for value in a: 5219f3f6d7bSStella Laurenzo print(value, end=" ") 5229f3f6d7bSStella Laurenzo print() 5239f3f6d7bSStella Laurenzo 5249f3f6d7bSStella Laurenzo # CHECK: f32 5259f3f6d7bSStella Laurenzo print(ShapedType(a.type).element_type) 5269f3f6d7bSStella Laurenzo 5279f3f6d7bSStella Laurenzo 5289f3f6d7bSStella Laurenzo# CHECK-LABEL: TEST: testDictAttr 5299f3f6d7bSStella Laurenzo@run 5309f3f6d7bSStella Laurenzodef testDictAttr(): 5319f3f6d7bSStella Laurenzo with Context(): 5329f3f6d7bSStella Laurenzo dict_attr = { 533f9008e63STobias Hieta "stringattr": StringAttr.get("string"), 534f9008e63STobias Hieta "integerattr": IntegerAttr.get(IntegerType.get_signless(32), 42), 5359f3f6d7bSStella Laurenzo } 5369f3f6d7bSStella Laurenzo 5379f3f6d7bSStella Laurenzo a = DictAttr.get(dict_attr) 5389f3f6d7bSStella Laurenzo 539a5985ca5Sklensy # CHECK: attr: {integerattr = 42 : i32, stringattr = "string"} 5409f3f6d7bSStella Laurenzo print("attr:", a) 5419f3f6d7bSStella Laurenzo 5429f3f6d7bSStella Laurenzo assert len(a) == 2 5439f3f6d7bSStella Laurenzo 544974c1596SRahul Kayaith # CHECK: integerattr: IntegerAttr(42 : i32) 545974c1596SRahul Kayaith print("integerattr:", repr(a["integerattr"])) 5469f3f6d7bSStella Laurenzo 547974c1596SRahul Kayaith # CHECK: stringattr: StringAttr("string") 548974c1596SRahul Kayaith print("stringattr:", repr(a["stringattr"])) 5499f3f6d7bSStella Laurenzo 5509fb1086bSAdrian Kuegel # CHECK: True 551f9008e63STobias Hieta print("stringattr" in a) 5529fb1086bSAdrian Kuegel 5539fb1086bSAdrian Kuegel # CHECK: False 554f9008e63STobias Hieta print("not_in_dict" in a) 5559fb1086bSAdrian Kuegel 5569f3f6d7bSStella Laurenzo # Check that exceptions are raised as expected. 5579f3f6d7bSStella Laurenzo try: 558f9008e63STobias Hieta _ = a["does_not_exist"] 5599f3f6d7bSStella Laurenzo except KeyError: 5609f3f6d7bSStella Laurenzo pass 5619f3f6d7bSStella Laurenzo else: 5629f3f6d7bSStella Laurenzo assert False, "Exception not produced" 5639f3f6d7bSStella Laurenzo 5649f3f6d7bSStella Laurenzo try: 5659f3f6d7bSStella Laurenzo _ = a[42] 5669f3f6d7bSStella Laurenzo except IndexError: 5679f3f6d7bSStella Laurenzo pass 5689f3f6d7bSStella Laurenzo else: 5699f3f6d7bSStella Laurenzo assert False, "expected IndexError on accessing an out-of-bounds attribute" 5709f3f6d7bSStella Laurenzo 571a5985ca5Sklensy # CHECK: empty: {} 572ed9e52f3SAlex Zinenko print("empty: ", DictAttr.get()) 573ed9e52f3SAlex Zinenko 5749f3f6d7bSStella Laurenzo 5759f3f6d7bSStella Laurenzo# CHECK-LABEL: TEST: testTypeAttr 5769f3f6d7bSStella Laurenzo@run 5779f3f6d7bSStella Laurenzodef testTypeAttr(): 5789f3f6d7bSStella Laurenzo with Context(): 5799f3f6d7bSStella Laurenzo raw = Attribute.parse("vector<4xf32>") 5809f3f6d7bSStella Laurenzo # CHECK: attr: vector<4xf32> 5819f3f6d7bSStella Laurenzo print("attr:", raw) 5829f3f6d7bSStella Laurenzo type_attr = TypeAttr(raw) 5839f3f6d7bSStella Laurenzo # CHECK: f32 5849f3f6d7bSStella Laurenzo print(ShapedType(type_attr.value).element_type) 5859f3f6d7bSStella Laurenzo 5869f3f6d7bSStella Laurenzo 5879f3f6d7bSStella Laurenzo# CHECK-LABEL: TEST: testArrayAttr 5889f3f6d7bSStella Laurenzo@run 5899f3f6d7bSStella Laurenzodef testArrayAttr(): 5909f3f6d7bSStella Laurenzo with Context(): 591974c1596SRahul Kayaith arr = Attribute.parse("[42, true, vector<4xf32>]") 592974c1596SRahul Kayaith # CHECK: arr: [42, true, vector<4xf32>] 593974c1596SRahul Kayaith print("arr:", arr) 594974c1596SRahul Kayaith # CHECK: - IntegerAttr(42 : i64) 595974c1596SRahul Kayaith # CHECK: - BoolAttr(true) 596974c1596SRahul Kayaith # CHECK: - TypeAttr(vector<4xf32>) 597974c1596SRahul Kayaith for attr in arr: 598974c1596SRahul Kayaith print("- ", repr(attr)) 5999f3f6d7bSStella Laurenzo 6009f3f6d7bSStella Laurenzo with Context(): 6019f3f6d7bSStella Laurenzo intAttr = Attribute.parse("42") 6029f3f6d7bSStella Laurenzo vecAttr = Attribute.parse("vector<4xf32>") 6039f3f6d7bSStella Laurenzo boolAttr = BoolAttr.get(True) 6049f3f6d7bSStella Laurenzo raw = ArrayAttr.get([vecAttr, boolAttr, intAttr]) 6059f3f6d7bSStella Laurenzo # CHECK: attr: [vector<4xf32>, true, 42] 6069f3f6d7bSStella Laurenzo print("raw attr:", raw) 607974c1596SRahul Kayaith # CHECK: - TypeAttr(vector<4xf32>) 608974c1596SRahul Kayaith # CHECK: - BoolAttr(true 609974c1596SRahul Kayaith # CHECK: - IntegerAttr(42 : i64) 610974c1596SRahul Kayaith arr = raw 6119f3f6d7bSStella Laurenzo for attr in arr: 612974c1596SRahul Kayaith print("- ", repr(attr)) 613974c1596SRahul Kayaith # CHECK: attr[0]: TypeAttr(vector<4xf32>) 614974c1596SRahul Kayaith print("attr[0]:", repr(arr[0])) 615974c1596SRahul Kayaith # CHECK: attr[1]: BoolAttr(true) 616974c1596SRahul Kayaith print("attr[1]:", repr(arr[1])) 617974c1596SRahul Kayaith # CHECK: attr[2]: IntegerAttr(42 : i64) 618974c1596SRahul Kayaith print("attr[2]:", repr(arr[2])) 6199f3f6d7bSStella Laurenzo try: 6209f3f6d7bSStella Laurenzo print("attr[3]:", arr[3]) 6219f3f6d7bSStella Laurenzo except IndexError as e: 6229f3f6d7bSStella Laurenzo # CHECK: Error: ArrayAttribute index out of range 6239f3f6d7bSStella Laurenzo print("Error: ", e) 6249f3f6d7bSStella Laurenzo with Context(): 6259f3f6d7bSStella Laurenzo try: 6269f3f6d7bSStella Laurenzo ArrayAttr.get([None]) 6279f3f6d7bSStella Laurenzo except RuntimeError as e: 6289f3f6d7bSStella Laurenzo # CHECK: Error: Invalid attribute (None?) when attempting to create an ArrayAttribute 6299f3f6d7bSStella Laurenzo print("Error: ", e) 6309f3f6d7bSStella Laurenzo try: 6319f3f6d7bSStella Laurenzo ArrayAttr.get([42]) 6329f3f6d7bSStella Laurenzo except RuntimeError as e: 6339f3f6d7bSStella Laurenzo # CHECK: Error: Invalid attribute when attempting to create an ArrayAttribute 6349f3f6d7bSStella Laurenzo print("Error: ", e) 635ed9e52f3SAlex Zinenko 636ed9e52f3SAlex Zinenko with Context(): 637ed9e52f3SAlex Zinenko array = ArrayAttr.get([StringAttr.get("a"), StringAttr.get("b")]) 638ed9e52f3SAlex Zinenko array = array + [StringAttr.get("c")] 639ed9e52f3SAlex Zinenko # CHECK: concat: ["a", "b", "c"] 640ed9e52f3SAlex Zinenko print("concat: ", array) 641ac2e2d65SDenys Shabalin 642ac2e2d65SDenys Shabalin 643ac2e2d65SDenys Shabalin# CHECK-LABEL: TEST: testStridedLayoutAttr 644ac2e2d65SDenys Shabalin@run 645ac2e2d65SDenys Shabalindef testStridedLayoutAttr(): 646ac2e2d65SDenys Shabalin with Context(): 647ac2e2d65SDenys Shabalin attr = StridedLayoutAttr.get(42, [5, 7, 13]) 648ac2e2d65SDenys Shabalin # CHECK: strided<[5, 7, 13], offset: 42> 649ac2e2d65SDenys Shabalin print(attr) 650ac2e2d65SDenys Shabalin # CHECK: 42 651ac2e2d65SDenys Shabalin print(attr.offset) 652ac2e2d65SDenys Shabalin # CHECK: 3 653ac2e2d65SDenys Shabalin print(len(attr.strides)) 654ac2e2d65SDenys Shabalin # CHECK: 5 655ac2e2d65SDenys Shabalin print(attr.strides[0]) 656ac2e2d65SDenys Shabalin # CHECK: 7 657ac2e2d65SDenys Shabalin print(attr.strides[1]) 658ac2e2d65SDenys Shabalin # CHECK: 13 659ac2e2d65SDenys Shabalin print(attr.strides[2]) 660e3fd612eSDenys Shabalin 661e3fd612eSDenys Shabalin attr = StridedLayoutAttr.get_fully_dynamic(3) 662e3fd612eSDenys Shabalin dynamic = ShapedType.get_dynamic_stride_or_offset() 663e3fd612eSDenys Shabalin # CHECK: strided<[?, ?, ?], offset: ?> 664e3fd612eSDenys Shabalin print(attr) 665e3fd612eSDenys Shabalin # CHECK: offset is dynamic: True 666e3fd612eSDenys Shabalin print(f"offset is dynamic: {attr.offset == dynamic}") 667e3fd612eSDenys Shabalin # CHECK: rank: 3 668e3fd612eSDenys Shabalin print(f"rank: {len(attr.strides)}") 669e3fd612eSDenys Shabalin # CHECK: strides are dynamic: [True, True, True] 670e3fd612eSDenys Shabalin print(f"strides are dynamic: {[s == dynamic for s in attr.strides]}") 671bfb1ba75Smax 672bfb1ba75Smax 673bfb1ba75Smax# CHECK-LABEL: TEST: testConcreteTypesRoundTrip 674bfb1ba75Smax@run 675bfb1ba75Smaxdef testConcreteTypesRoundTrip(): 676bfb1ba75Smax with Context(), Location.unknown(): 677bfb1ba75Smax 678bfb1ba75Smax def print_item(attr): 679bfb1ba75Smax print(repr(attr.type)) 680bfb1ba75Smax 681bfb1ba75Smax # CHECK: F32Type(f32) 682bfb1ba75Smax print_item(Attribute.parse("42.0 : f32")) 683bfb1ba75Smax # CHECK: F32Type(f32) 684bfb1ba75Smax print_item(FloatAttr.get_f32(42.0)) 685bfb1ba75Smax # CHECK: IntegerType(i64) 686bfb1ba75Smax print_item(IntegerAttr.get(IntegerType.get_signless(64), 42)) 687bfb1ba75Smax 688bfb1ba75Smax def print_container_item(attr_asm): 689bfb1ba75Smax attr = DenseElementsAttr(Attribute.parse(attr_asm)) 690bfb1ba75Smax print(repr(attr.type)) 691bfb1ba75Smax print(repr(attr.type.element_type)) 692bfb1ba75Smax 693bfb1ba75Smax # CHECK: RankedTensorType(tensor<i16>) 694bfb1ba75Smax # CHECK: IntegerType(i16) 695bfb1ba75Smax print_container_item("dense<123> : tensor<i16>") 696bfb1ba75Smax 697bfb1ba75Smax # CHECK: RankedTensorType(tensor<f64>) 698bfb1ba75Smax # CHECK: F64Type(f64) 699bfb1ba75Smax print_container_item("dense<1.0> : tensor<f64>") 700bfb1ba75Smax 701bfb1ba75Smax raw = Attribute.parse("vector<4xf32>") 702bfb1ba75Smax # CHECK: attr: vector<4xf32> 703bfb1ba75Smax print("attr:", raw) 704bfb1ba75Smax type_attr = TypeAttr(raw) 705bfb1ba75Smax 706bfb1ba75Smax # CHECK: VectorType(vector<4xf32>) 707bfb1ba75Smax print(repr(type_attr.value)) 708bfb1ba75Smax # CHECK: F32Type(f32) 709bfb1ba75Smax print(repr(type_attr.value.element_type)) 7109566ee28Smax 7119566ee28Smax 7129566ee28Smax# CHECK-LABEL: TEST: testConcreteAttributesRoundTrip 7139566ee28Smax@run 7149566ee28Smaxdef testConcreteAttributesRoundTrip(): 7159566ee28Smax with Context(), Location.unknown(): 7169566ee28Smax # CHECK: FloatAttr(4.200000e+01 : f32) 7179566ee28Smax print(repr(Attribute.parse("42.0 : f32"))) 7189566ee28Smax 7199566ee28Smax assert IntegerAttr.static_typeid is not None 720