Creates either a `quake.StruqType` or a `cc.StructType` used to represent tuples and `dataclass` structs of quantum and classical types. Returns None if the given element types don't satisfy the restrictions imposed on these types.
(mlirEleTypes, name=None, context=None)
| 353 | |
| 354 | |
| 355 | def mlirTryCreateStructType(mlirEleTypes, name=None, context=None): |
| 356 | """ |
| 357 | Creates either a `quake.StruqType` or a `cc.StructType` used to represent |
| 358 | tuples and `dataclass` structs of quantum and classical types. Returns |
| 359 | None if the given element types don't satisfy the restrictions imposed |
| 360 | on these types. |
| 361 | """ |
| 362 | |
| 363 | name = name or "tuple" |
| 364 | |
| 365 | def isQuantumType(ty): |
| 366 | return quake.RefType.isinstance(ty) or quake.VeqType.isinstance( |
| 367 | ty) or quake.StruqType.isinstance(ty) |
| 368 | |
| 369 | numQuantumMembers = sum((isQuantumType(t) for t in mlirEleTypes)) |
| 370 | if numQuantumMembers == 0: |
| 371 | if any((cc.PointerType.isinstance(t) for t in mlirEleTypes)): |
| 372 | return None |
| 373 | return cc.StructType.getNamed(name, mlirEleTypes, context=context) |
| 374 | if numQuantumMembers != len(mlirEleTypes) or \ |
| 375 | any((quake.StruqType.isinstance(t) for t in mlirEleTypes)): |
| 376 | return None |
| 377 | return quake.StruqType.getNamed(name, mlirEleTypes, context=context) |
| 378 | |
| 379 | |
| 380 | def mlirTypeFromAnnotation(annotation, |
no test coverage detected