[https://quantumai.google/cirq CirQ] est une bibliothèque d'informatique quantique à code source ouvert développée en [[Python/fr|Python]] par Google, qui permet de construire, optimiser, simuler et exécuter des circuits quantiques. Plus particulièrement, CirQ permet de simuler des circuits sur des configurations spécifiques de qubits, ce qui peut optimiser un circuit pour une certaine architecture de qubits. L'information sur les fonctionnalités de la bibliothèque est disponible dans la [https://quantumai.google/cirq documentation] et sur le [https://github.com/quantumlib/Cirq GitHub] de CirQ. Tout comme [[Snowflurry]], CirQ peut être utilisée pour exécuter des circuits quantiques sur l'ordinateur quantique [[MonarQ]].
== Installation ==
Le simulateur d'ordinateur quantique CirQ est disponible sur toutes nos grappes. Le langage de programmation [[Python/fr|Python]] doit être chargé avant d'y avoir accès. Il est préférable de travailler dans un [[Python/fr#Créer_et_utiliser_un_environnement_virtuel|environnement virtuel Python]].
{{Commands
|module load python/3.11
|virtualenv --no-download --clear ~/ENV && source ~/ENV/bin/activate
|pip install --no-index --upgrade pip
|pip install --no-index cirq{{=}}{{=}}1.4.1
|python -c "import cirq"
|pip freeze > cirq-1.4.1-reqs.txt
}}
La dernière commande crée un fichier nommé cirq-1.4.1-reqs.txt, que vous pouvez réutiliser dans un script de tâche, tel que décrit ci-dessous.
==Exécution sur une grappe==
{{File
|name=script.sh
|lang="sh"
|contents=
#!/bin/bash
#SBATCH --account=def-someuser # indiquez le nom de votre compte
#SBATCH --time=00:15:00 # modifiez s'il y a lieu
#SBATCH --cpus-per-task=1 # modifiez s'il y a lieu
#SBATCH --mem-per-cpu=1G # modifiez s'il y a lieu
# Chargez les dépendances des modules.
module load StdEnv/2023 gcc python/3.11
# Générez l'environnement virtuel dans $SLURM_TMPDIR.
virtualenv --no-download ${SLURM_TMPDIR}/env
source ${SLURM_TMPDIR}/env/bin/activate
# Installez CirQ et ses dépendances.
pip install --no-index --upgrade pip
pip install --no-index --requirement ~/cirq-1.4.1-reqs.txt
# Modifiez le programme CirQ.
python cirq_example.py
}}
Vous pouvez ensuite [[Running jobs/fr|soumettre votre tâche à l'ordonnanceur]].
== Exemple d'utilisation : États de Bell ==
Les états de Bell sont les états les plus simples qui permettent d'expliquer à la fois la superposition et l'intrication sur des qubits.
La bibliothèque [https://github.com/quantumlib/Cirq CirQ] permet de construire un état de Bell comme ceci :
{{Command|python
|result=python> import cirq
python> from cirq.contrib.svg import SVGCircuit
python> from cirq import H, CNOT
python> qubits = cirq.LineQubit.range(2)
python> circuit = cirq.Circuit(H.on(qubits[0]),CNOT.on(qubits[0],qubits[1]))
python> circuit.append(cirq.measure(qubits, key='m'))
python> SVGCircuit(circuit)
}}
[[File:Bell Circuit CirQ.png|thumb|alt=Représentation du circuit créant un état de Bell]]
Ce code construit et affiche un circuit qui prépare un état de Bell. La porte H (porte de Hadamard) crée une superposition égale de |0⟩ et |1⟩ sur le premier qubit tandis que la porte CNOT (porte X contrôlée) crée une intrication entre les deux qubits. Cet état de Bell est donc une superposition égale des états |00⟩ et |11⟩. La simulation de ce circuit à l'aide de CirQ permet de visualiser les résultats. Dans ce diagramme, le nombre entier 3 représente l'état |11⟩ puisque 3 s'écrit 11 en binaire.
{{Command|python
|result=python> import matplotlib.pyplot as plt
python> s = cirq.Simulator().run(circuit, repetitions=1000)
python> counts = s.histogram(key='m')
python> cirq.plot_state_histogram(counts, plt.subplot())
}}
[[File:Bell Graph CirQ.png|thumb|alt=Diagramme du résultat de 1000 simulations de l'état de Bell]]