diff --git a/mlir/lib/Bindings/Python/IRAttributes.cpp b/mlir/lib/Bindings/Python/IRAttributes.cpp --- a/mlir/lib/Bindings/Python/IRAttributes.cpp +++ b/mlir/lib/Bindings/Python/IRAttributes.cpp @@ -490,9 +490,9 @@ "data", [](PyOpaqueAttribute &self) { MlirStringRef stringRef = mlirOpaqueAttrGetData(self); - return py::str(stringRef.data, stringRef.length); + return py::bytes(stringRef.data, stringRef.length); }, - "Returns the data for the Opaqued attributes as a string"); + "Returns the data for the Opaqued attributes as `bytes`"); } }; @@ -528,6 +528,13 @@ return py::str(stringRef.data, stringRef.length); }, "Returns the value of the string attribute"); + c.def_property_readonly( + "value_bytes", + [](PyStringAttribute &self) { + MlirStringRef stringRef = mlirStringAttrGetValue(self); + return py::bytes(stringRef.data, stringRef.length); + }, + "Returns the value of the string attribute as `bytes`"); } }; diff --git a/mlir/test/python/ir/attributes.py b/mlir/test/python/ir/attributes.py --- a/mlir/test/python/ir/attributes.py +++ b/mlir/test/python/ir/attributes.py @@ -248,7 +248,7 @@ oattr = OpaqueAttr(Attribute.parse("#pytest_dummy.dummyattr<>")) # CHECK: oattr value: pytest_dummy print("oattr value:", oattr.dialect_namespace) - # CHECK: oattr value: dummyattr<> + # CHECK: oattr value: b'dummyattr<>' print("oattr value:", oattr.data) # Test factory methods. @@ -265,6 +265,8 @@ sattr = StringAttr(Attribute.parse('"stringattr"')) # CHECK: sattr value: stringattr print("sattr value:", sattr.value) + # CHECK: sattr value: b'stringattr' + print("sattr value:", sattr.value_bytes) # Test factory methods. # CHECK: default_get: "foobar" diff --git a/mlir/test/python/ir/operation.py b/mlir/test/python/ir/operation.py --- a/mlir/test/python/ir/operation.py +++ b/mlir/test/python/ir/operation.py @@ -516,6 +516,8 @@ print(f"Attribute type {fattr.type}, value {fattr.value}") # CHECK: Attribute value text print(f"Attribute value {sattr.value}") + # CHECK: Attribute value b'text' + print(f"Attribute value {sattr.value_bytes}") # We don't know in which order the attributes are stored. # CHECK-DAG: NamedAttribute(dependent="text")