Skip to content

Commit

Permalink
Merge pull request #61 from Jij-Inc/feature/drawer
Browse files Browse the repository at this point in the history
add drawer
  • Loading branch information
yuyamashiro authored Aug 25, 2024
2 parents 239e3a5 + 3b2ddd6 commit 0385560
Show file tree
Hide file tree
Showing 7 changed files with 826 additions and 611 deletions.
494 changes: 96 additions & 398 deletions docs/tutorial/alternating_ansatz_graph_coloring.ipynb

Large diffs are not rendered by default.

432 changes: 220 additions & 212 deletions poetry.lock

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ quri-parts-qulacs = {version = "*", extras = ["quri-parts"]}
black = "^23.11.0"
quri-parts-circuit = "^0.19.0"
qiskit = "^1.1.1"
matplotlib = "^3.9.2"


[tool.poetry.group.dev.dependencies]
Expand Down
37 changes: 36 additions & 1 deletion qamomile/core/circuit/circuit.py
Original file line number Diff line number Diff line change
Expand Up @@ -150,6 +150,24 @@ def __init__(
self.circuit = circuit
self.label = label

def operated_qubits(self) -> list[int]:
operated_qubits = []
for gate in self.circuit.gates:
if isinstance(gate, (SingleQubitGate, ParametricSingleQubitGate)):
operated_qubits.append(gate.qubit)
elif isinstance(gate, (TwoQubitGate, ParametricTwoQubitGate)):
operated_qubits.append(gate.control)
operated_qubits.append(gate.target)
elif isinstance(gate, ThreeQubitGate):
operated_qubits.append(gate.control1)
operated_qubits.append(gate.control2)
operated_qubits.append(gate.target)
elif isinstance(gate, Operator):
operated_qubits.extend(gate.operated_qubits())
else:
raise ValueError(f"Invalid gate type: {type(gate)}")
return list(set(operated_qubits))


class QuantumCircuit:
"""
Expand All @@ -171,12 +189,29 @@ def __init__(
Args:
num_qubits (int): The number of qubits in the circuit.
"""
self.gates = []
self.gates: list[Gate] = []
self.num_qubits = num_qubits
self.num_clbits = num_clbits

self.name = name

self._qubits_label: list[str] = ["q_{" + str(i) + "}" for i in range(num_qubits)]

def update_qubits_label(self, qubits_label: dict[int, str]):
"""
Update the qubits label.
Args:
qubits_label (dict[int, str]): A dictionary of qubit index and its label.
"""
for i in range(self.num_qubits):
if i in qubits_label:
self._qubits_label[i] = qubits_label[i]

@property
def qubits_label(self) -> list[str]:
return self._qubits_label

def add_gate(self, gate: Gate):
"""
Add a gate to the quantum circuit.
Expand Down
Loading

0 comments on commit 0385560

Please sign in to comment.