MCPcopy Create free account
hub / github.com/NVIDIA/cuda-quantum / mlirTryCreateStructType

Function mlirTryCreateStructType

python/cudaq/kernel/utils.py:355–377  ·  view source on GitHub ↗

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)

Source from the content-addressed store, hash-verified

353
354
355def 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
380def mlirTypeFromAnnotation(annotation,

Callers 4

get_item_typeMethod · 0.85
mlirTypeFromAnnotationFunction · 0.85
mlirTypeFromPyTypeFunction · 0.85

Calls 2

sumFunction · 0.85
isQuantumTypeFunction · 0.70

Tested by

no test coverage detected