in src/braket/circuits/ascii_circuit_diagram.py [0:0]
def build_diagram(circuit) -> str:
"""
Build an ASCII string circuit diagram.
Args:
circuit (Circuit): Circuit for which to build a diagram.
Returns:
str: ASCII string circuit diagram.
"""
if not circuit.instructions:
return ""
circuit_qubits = circuit.qubits
circuit_qubits.sort()
# Y Axis Column
y_axis_width = len(str(int(max(circuit_qubits))))
y_axis_str = "{0:{width}} : |\n".format("T", width=y_axis_width + 1)
for qubit in circuit_qubits:
y_axis_str += "{0:{width}}\n".format(" ", width=y_axis_width + 5)
y_axis_str += "q{0:{width}} : -\n".format(str(int(qubit)), width=y_axis_width)
time_slices = circuit.moments.time_slices()
column_strs = []
# Moment columns
for time, instructions in time_slices.items():
moment_str = AsciiCircuitDiagram._ascii_diagram_column_set(
str(time), circuit_qubits, instructions
)
column_strs.append(moment_str)
# Result type columns
additional_result_types, target_result_types = AsciiCircuitDiagram._categorize_result_types(
circuit.result_types
)
if target_result_types:
column_strs.append(
AsciiCircuitDiagram._ascii_diagram_column_set(
"Result Types", circuit_qubits, target_result_types
)
)
# Unite strings
lines = y_axis_str.split("\n")
for col_str in column_strs:
for i, line_in_col in enumerate(col_str.split("\n")):
lines[i] += line_in_col
# Time on top and bottom
lines.append(lines[0])
# Additional result types line on bottom
if additional_result_types:
lines.append(f"\nAdditional result types: {', '.join(additional_result_types)}")
return "\n".join(lines)