Skip to content

Lowering

Lowering dataclass

Lowering()

lower

lower(
    sym_name: str,
    noise_model: NoiseModel,
    return_qreg: bool = False,
) -> ir.Method

Lower the noise model to a method.

Parameters:

Name Type Description Default
name str

The name of the method to generate.

required
return_qreg bool

Use the quantum register as the return value.

False

Returns:

Name Type Description
Method Method

The generated kirin method.

Source code in .venv/lib/python3.12/site-packages/bloqade/qbraid/lowering.py
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
def lower(
    self,
    sym_name: str,
    noise_model: schema.NoiseModel,
    return_qreg: bool = False,
) -> ir.Method:
    """Lower the noise model to a method.

    Args:
        name (str): The name of the method to generate.
        return_qreg (bool): Use the quantum register as the return value.

    Returns:
        Method: The generated kirin method.

    """
    self.process_noise_model(noise_model, return_qreg)
    block = ir.Block(stmts=self.block_list)
    ret_type = qasm2.types.QRegType if return_qreg else qasm2.types.CRegType
    block.args.append_from(types.MethodType[[], ret_type], name=f"{sym_name}_self")
    region = ir.Region(block)
    func_stmt = func.Function(
        sym_name=sym_name,
        signature=func.Signature(inputs=(), output=qasm2.types.QRegType),
        body=region,
    )

    mt = ir.Method(
        mod=None,
        py_func=None,
        sym_name=sym_name,
        dialects=qbraid_noise,
        code=func_stmt,
        arg_names=[],
    )
    qbraid_noise.run_pass(mt)  # type: ignore
    return mt