Bonjour, Habr! Je vous présente la traduction de l'article "Présentation et comparaison des plateformes logicielles Quantum Gate Level" par Ryan LaRose.
Les ordinateurs quantiques sont disponibles pour une utilisation dans l'infrastructure cloud, mais en mĂȘme temps, l'essor rĂ©cent des plates-formes logicielles quantiques peut ĂȘtre Ă©crasant pour ceux qui dĂ©cident quoi utiliser. Cet article offre une image actuelle du paysage en Ă©volution rapide de l'informatique quantique en comparant quatre plates-formes logicielles - Forest (pyQuil), QISKit, ProjectQ et Quantum Development Kit - qui permettent aux chercheurs d'utiliser des appareils quantiques rĂ©els et simulĂ©s. Cette analyse couvre les exigences et l'installation, la syntaxe du langage sur l'exemple des programmes, le support au niveau de la bibliothĂšque et les possibilitĂ©s d'un simulateur quantique pour chaque plateforme. Pour les plates-formes qui prennent en charge les ordinateurs quantiques, nous comparons le matĂ©riel, les langages d'assembleurs quantiques et les compilateurs quantiques. En conclusion, nous examinerons les caractĂ©ristiques de chacun d'entre eux et mentionnerons briĂšvement d'autres logiciels pour l'informatique quantique.
Table des matiĂšres
I. Introduction
II. Plateformes logicielles
A. pyQuil
B. QISKit
C. ProjectQ
D. Kit de développement Quatum
III. Comparaison
A. Prise en charge de la bibliothĂšque
Matériel quantique
C. Compilateurs quantiques
D. Performances du simulateur
E. Caractéristiques
IV. Discussion et conclusions
Les références
Annexe A. Autres plates-formes logicielles
Annexe B. Test des performances du simulateur
Annexe C. Exemple de programme: programme de téléportation
I. Introduction
Les langages de programmation quantique ont été envisagés il y a au moins deux décennies [1-3], mais ils étaient pour la plupart théoriques et sans équipement existant. Les ordinateurs quantiques sont désormais une réalité, et il existe des langages de programmation quantiques qui permettront à toute personne ayant accÚs à Internet de les utiliser. Un bon nombre de chercheurs, tant dans l'industrie que dans le milieu universitaire, ont créé de petits appareils quantiques qui fonctionnent sur un modÚle de circuit de l'informatique quantique. Ces ordinateurs sont petits, bruyants et pas aussi puissants que les ordinateurs classiques modernes. Mais ils émergent, en croissance constante et préfigurant l'avenir d'une puissance de calcul incroyablement grande pour les tùches de chimie [4, 5], d'apprentissage automatique [6, 7], d'optimisation [8], du secteur financier [9] et plus encore [10]. Ces appareils sont un banc d'essai pour former la prochaine génération d'ingénieurs en logiciel quantique à résoudre les tùches classiques complexes existantes de la technologie informatique. En effet, l'informatique quantique du cloud a déjà été utilisée pour calculer l'énergie de liaison au deutéron [11] et tester des routines dans des algorithmes d'apprentissage automatique [12, 13].
RĂ©cemment, il y a eu une croissance rapide des logiciels informatiques quantiques sur un large Ă©ventail de langages informatiques classiques. Une liste de projets open source avec plus de cinquante projets est disponible dans [14], et une liste de simulations informatiques quantiques est disponible dans [15]. Ce grand nombre de programmes qui reflĂštent positivement la croissance dans le domaine rend difficile pour les Ă©tudiants et les chercheurs de dĂ©cider quel logiciel utiliser, afin de ne pas se perdre dans la documentation ou d'ĂȘtre choquĂ© par les connaissances initiales nĂ©cessaires.
Cet article devrait fournir un bref aperçu et une comparaison des principales plates-formes logicielles pour l'informatique quantique à usage général au niveau de la porte. Quatre ont été sélectionnés dans une longue liste: trois, donnant à l'utilisateur la possibilité de se connecter à de vrais appareils quantiques - pyQuil de Rigetti [16], QISKit d'IBM [17] et ProjectQ de l'ETH Zurich [18, 19], et un avec des fonctionnalités similaires, mais sans la capacité actuelle de se connecter à un ordinateur quantique - Kit de développement quantique de Microsoft [20]. En faveur du choix de ces plateformes est devenu la possibilité de se connecter à un véritable appareil quantique. Pour cette raison, et par souci de concision, un certain nombre de programmes respectables sont délibérément omis. Certains d'entre eux sont mentionnés à l'annexe A.
à l'heure actuelle, l'objectif principal est de présenter une image de paysage de l'informatique quantique causée par ces quatre plates-formes. Dans la section II, nous examinerons tour à tour chaque plate-forme, en discutant des exigences et de l'installation, de la documentation et des didacticiels, de la syntaxe du langage et de l'équipement quantique. La section III fournit une comparaison détaillée des plates-formes. Il comprend: la prise en charge au niveau de la bibliothÚque d'algorithmes quantiques dans III A , la prise en charge matérielle quantique dans III B , des compilateurs de circuits quantiques dans III C et des simulateurs informatiques quantiques III D. La section IV traite de certains commentaires subjectifs sur chaque plate-forme. L'annexe A contient des informations sur d'autres logiciels quantiques, l'annexe B contient des informations détaillées sur les tests de simulateurs de circuits quantiques, et l'annexe C montre le code des schémas de téléportation quantique dans chacune des quatre langues pour la comparaison cÎte à cÎte.
La figure 1 montre divers ordinateurs quantiques et logiciels utilisĂ©s pour se connecter Ă des appareils. Actuellement, quatre plates-formes logicielles vous permettent de vous connecter Ă quatre ordinateurs quantiques diffĂ©rents - un de Rigetti, un ordinateur quantique Ă 8 qubits, vous pouvez vous connecter Ă l'aide de pyQuil [41]; et trois d'IBM, avec les 16 qubits les plus Ă©levĂ©s disponibles, qui peuvent ĂȘtre connectĂ©s Ă l'aide de QISKit ou ProjectQ. En outre, IBM propose un quatriĂšme ordinateur quantique Ă 20 qubits, mais cet appareil n'est disponible que pour les membres du rĂ©seau IBM Q [42]: un groupe d'entreprises, d'universitĂ©s et de laboratoires nationaux intĂ©ressĂ©s et investissant dans l'informatique quantique. La figure 1 montre Ă©galement les ordinateurs quantiques d'entreprises telles que Google, IBM et Intel qui ont Ă©tĂ© annoncĂ©s mais qui ne sont actuellement pas disponibles pour les utilisateurs rĂ©guliers.

Figure 1. Un diagramme schĂ©matique montrant comment connecter un ordinateur personnel Ă l'ordinateur quantique utilisĂ© au niveau de la porte. Ă partir d'un ordinateur personnel (en bas au centre), les nĆuds verts affichent un logiciel qui peut ĂȘtre installĂ© sur l'ordinateur personnel de l'utilisateur. Les nĆuds gris indiquent que les simulateurs s'exĂ©cutent localement (c'est-Ă -dire sur l'ordinateur d'un utilisateur). Les lignes en pointillĂ©s montrent les connexions API / cloud aux ressources de l'entreprise affichĂ©es en «nuages» jaunes. Les simulateurs quantiques et les ordinateurs quantiques utilisĂ©s fournis par ces ressources nuageuses sont reprĂ©sentĂ©s respectivement en bleu et or. Les cadres rouges indiquent les exigences de la mĂ©thode sĂ©lectionnĂ©e. Par exemple, pour vous connecter Ă Rigetti Forest et utiliser l'ordinateur quantique Agave 8 qubit, vous devez tĂ©lĂ©charger et installer pyQuil (disponible sur MacOS, Windows et Linux), vous inscrire sur le site Web de Rigetti pour obtenir une clĂ© API, puis demander l'accĂšs Ă l'appareil via Internet forme. Notes: (i) La machine virtuelle quantique Rigetti nĂ©cessite une Ă©lĂ©vation des droits pour plus de 30 qubits, (ii) les simulateurs locaux dĂ©pendent de l'ordinateur de l'utilisateur, donc les nombres donnĂ©s sont approximatifs, et (iii) les ordinateurs quantiques qui ont Ă©tĂ© annoncĂ©s mais qui actuellement indisponible pour les utilisateurs rĂ©guliers.La technologie de l'Ă©quipement quantique Ă©volue rapidement. Il est trĂšs probable que de nouveaux ordinateurs apparaĂźtront d'ici la fin de l'annĂ©e, et dans deux ou trois ans, cette liste pourrait ĂȘtre complĂštement dĂ©passĂ©e. Cependant, il reste le logiciel utilisĂ© pour se connecter Ă cette technologie. Il serait trĂšs simple d'utiliser de nouveaux ordinateurs quantiques, en changeant seulement quelques lignes de code, sans rĂ©ellement changer la syntaxe utilisĂ©e pour gĂ©nĂ©rer ou exĂ©cuter le circuit quantique. Par exemple, dans QISKit, il vous suffit de changer le nom du pĂ©riphĂ©rique principal lors de l'exĂ©cution du schĂ©ma:
execute(quantum_circuit, backend="name", ...)
Liste 1. La chaßne «nom» indique un périphérique principal pour exécuter des programmes quantiques à l'aide de QISKit. Lorsque de futurs ordinateurs quantiques seront commercialisés, il sera aussi simple de changer de nom que d'utiliser un nouveau matériel.
Bien que le logiciel change également avec la sortie de la nouvelle version [43], il s'agit, pour la plupart, de modifications syntaxiques relativement mineures qui ne modifient pas de maniÚre significative la fonctionnalité du logiciel.
Dans cette section, nous examinerons chacune des quatre plates-formes, en discutant des exigences et de l'installation, de la documentation et des manuels, de la syntaxe du langage, du langage quantique, de l'équipement quantique et des capacités du simulateur. Cette revue n'est pas destinée à enseigner pleinement la langue, mais elle donne au lecteur une compréhension de chaque plate-forme avant de plonger dans une (ou plusieurs) des plates-formes sélectionnées. L'analyse actuelle comprend suffisamment d'informations pour exécuter des algorithmes sur des ordinateurs quantiques. Néanmoins, le lecteur, lorsqu'il a choisi une plateforme spécifique, est envoyé vers une documentation spéciale pour des informations complÚtes. Des liens vers des sources de documentation et de didacticiel pour chaque progiciel ont été ajoutés. On suppose également qu'il existe des connaissances de base en informatique quantique, pour lesquelles il existe maintenant de nombreuses bonnes références [21, 22].
Tous les fragments de code et les programmes inclus dans ce document ont été testés et exécutés sur un ordinateur portable Dell XPS 13 Developer Edition exécutant Linux Ubuntu 16.04 LTS, dont les spécifications complÚtes sont répertoriées dans [23]. Bien que tous les packages logiciels fonctionnent dans les trois principaux systÚmes d'exploitation, il est beaucoup plus facile pour l'auteur d'installer et d'utiliser le logiciel sur la plate-forme sur laquelle il a été développé. Sur Linux Ubuntu, il n'y a eu aucune difficulté ou message d'erreur inhabituel lors de l'installation de ces packages logiciels.
| pyQuil | QISKit | Projectq | QDK |
---|
L'institution | Rigetti | Ibm | Et zurich | Microsoft |
PremiÚre version | v0.0.2 le 15 janv.2017 | 0.1 le 7 mars 2017 | v0.1.0 le 3 janv.2017 | 0.1.1712.901 le 4 janvier 2018 (version préliminaire) |
Version actuelle | v1.9.0 le 6 juin 2018 | 0.5.4 le 11 juin 2018 | v0.3.6 le 6 février 2018 | 0.2.1802.2202 le 26 février 2018 (version préliminaire) |
Open source | â
| â
| â
| â
|
Licence | Apache 2.0 | Apache 2.0 | Apache 2.0 | MIT |
Page d'accueil | Accueil | Accueil | Accueil | Accueil |
Github | Git | Git | Git | Git |
La documentation | Documents , didacticiels ( Grove ) | Documents , cahiers didacticiels , matériel | Documents , exemples de programmes , papier | Documents |
OS | Mac, Windows, Linux | Mac, Windows, Linux | Mac, Windows, Linux | Mac, Windows, Linux |
Prérequis | Python 3, Anaconda (recommandé) | Python 3.5+, Jupyter Notebooks (pour les tutoriels), Anaconda 3 (recommandé) | Python 2 ou 3 | Code Visual Studio (fortement recommandé) |
Langage classique | Python | Python | Python | Q # |
Langue quantique | Quil | Openqasm | aucun / hybride | Q # |
Matériel quantique | 8 qubits | IBMQX2 (5 qubits), IBMQX4 (5 qubits), IBMQX5 (16 qubits), QS1_1 (20 qubits) | aucun matériel dédié, peut se connecter aux backends IBM | aucun |
Simulateur | âŒ20 qubits localement, 26 qubits avec la plupart des clĂ©s API pour QVM, 30+ avec accĂšs privĂ© | Qu25 qubits localement, 30 via le cloud | âŒ28 qubits localement | 30 qubits localement, 40 via le cloud Azure |
CARACTĂRISTIQUES | GĂ©nĂ©ration de code Quil, exemples d'algorithmes dans Grove, compilateur spĂ©cifique Ă la topologie, capacitĂ©s de bruit dans le simulateur, canal Slack communautaire | GĂ©nĂ©ration de code QASM, compilateur spĂ©cifique Ă la topologie, canal Slack communautaire, tiroir de circuits, bibliothĂšque ACQUA | Dessinez des circuits, connectez-vous Ă des backends IBM, plusieurs plug-ins de bibliothĂšque | Algorithmes intĂ©grĂ©s, exemples d'algorithmes |
pyQuilA. pyQuil
pyQuil est une bibliothÚque Python open source développée par Rigetti pour créer, analyser et exécuter des programmes quantiques. Il est construit sur la base du langage Quil - un langage ouvert d'instructions quantiques (ou simplement un langage quantique ), spécialement conçu pour les ordinateurs quantiques prometteurs les plus proches et basé sur un modÚle de mémoire classique / quantique commun [24] (cela signifie que les qubits et bits classiques). pyQuil est l'une des bibliothÚques principales développées dans Forest, qui est la plate-forme clé pour tous les logiciels Rigetti. Forest comprend également Grove et Reference QVM, qui seront décrits plus loin.
a. Configuration requise et installation
L'installation et l'utilisation de pyQuil nécessitent des versions Python 2 ou 3, bien que Python 3 soit fortement recommandé, car les futures fonctions de développement ne prendront en charge que Python 3. En outre, la distribution Python Anaconda est recommandée pour diverses dépendances de module Python, bien que cela ne soit pas nécessaire.
La façon la plus simple d'installer pyQuil est d'utiliser la commande du gestionnaire de packages Python. à l'invite de commande Linux Ubuntu, entrez
pip install pyquil
pour une installation rĂ©ussie du logiciel. Alternativement, si Anaconda est installĂ©, pyQuil peut ĂȘtre installĂ© en tapant
conda install âc rigetti pyquil
sur la ligne de commande. Une autre alternative consiste à télécharger le code source à partir du référentiel git et à installer le logiciel. Pour ce faire, entrez les commandes suivantes:
git clone https://github.com/rigetticomputing/pyquil cd pyquil pip install âe
Cette derniÚre méthode est recommandée pour tous les utilisateurs qui peuvent contribuer à pyQuil. Consultez le guide de dépÎt GitHub pour plus d'informations.
b. Documentation et tutoriels
pyQuil a une excellente documentation publiĂ©e sur Internet, avec une introduction Ă l'informatique quantique, des instructions d'installation, des programmes de base et des opĂ©rations de porte, un simulateur connu sous le nom de machine virtuelle quantique (QVM), un vĂ©ritable ordinateur quantique et un langage Quil avec un compilateur. En tĂ©lĂ©chargeant le code source pyQuil depuis GitHub, vous obtiendrez Ă©galement un dossier avec des exemples dans les cahiers Jupyter, des exemples Python rĂ©guliers et un programme $ inline $ \ textesf {run_quil.py} $ inline $ , qui peut exĂ©cuter des documents texte Ă©crits en Quil Ă l'aide d'une machine virtuelle quantique. Enfin, mentionnez Grove , un ensemble d'algorithmes quantiques construits Ă l'aide de pyQuil et de l'environnement de la forĂȘt Rigetti.
c. Syntaxe
La syntaxe pyQuil est trĂšs simple et pratique. Le principal Ă©lĂ©ment d'enregistrement des circuits quantiques est le programme et peut ĂȘtre importĂ© de textesfpyquil.quil . Les opĂ©rations de porte peuvent ĂȘtre trouvĂ©es dans textesfpyquil.gates . Module textesfapi vous permet d'exĂ©cuter des circuits quantiques dans une machine virtuelle. L'une des fonctionnalitĂ©s intĂ©ressantes de pyQuil est que les registres qubit et les registres classiques n'ont pas Ă ĂȘtre dĂ©finis a priori et peuvent ĂȘtre allouĂ©s dynamiquement en mĂ©moire. Les Qubits dans le registre qubit sont dĂ©signĂ©s par des indices (0, 1, 2, ...) et de mĂȘme pour les bits dans le registre classique. Ainsi, le circuit gĂ©nĂ©rateur alĂ©atoire peut s'Ă©crire comme suit:
Listing 2. Code PyQuil pour un générateur de nombres aléatoires.
Les trois premiĂšres lignes importent le minimum nĂ©cessaire pour dĂ©clarer un schĂ©ma / programme quantique (ligne 2), pour effectuer des opĂ©rations de porte sur des qubits (ligne 3) [44] et pour exĂ©cuter le schĂ©ma (ligne 4). Ă la ligne 6, un programme quantique est créé, et aux lignes 7 Ă 8, une liste d'instructions lui est transmise: d'abord, agissez sur la porte Hadamard H au-dessus du qubit Ă l'index 0, alors nous mesurons le mĂȘme qubit en un bit classique sous l'index 0. La ligne 10 Ă©tablit une connexion avec QVM, et Ă 11 le rĂ©sultat de notre circuit est lancĂ© et affichĂ©. Ce programme imprime la sortie standard de pyQuil sous la forme d'une liste de listes d'entiers: dans notre cas - \ textesf {[[[[0]]}} ou textesf[[[[1]]] . En gĂ©nĂ©ral, le nombre d'Ă©lĂ©ments dans une liste externe est le nombre de tests effectuĂ©s. Les nombres entiers dans les listes internes sont les dimensions finales du registre classique. Puisque nous avons effectuĂ© un seul test (cela est indiquĂ© comme argument dans textesfapi.QVMConnection.run , qui est dĂ©fini sur l'unitĂ© par dĂ©faut), nous obtenons une seule liste interne. Puisque dans le registre classique, nous n'avions qu'un seul bit, nous n'obtenons qu'un seul entier.
d. Langue quantique
Quil est un langage d'instructions quantiques, ou tout simplement un langage quantique qui transmet des commandes Ă un ordinateur quantique. Ceci est similaire Ă l'assembleur sur les ordinateurs classiques. Le cĆur de la syntaxe Quil est textesfindexGATE oĂč textesfGATE est une porte quantique qui s'applique aux qubits indexĂ©s textesfindex (0, 1, 2, ...). pyQuil a une fonction pour gĂ©nĂ©rer du code Quil Ă partir d'un programme donnĂ©. Par exemple, dans le gĂ©nĂ©rateur de nombres alĂ©atoires quantiques susmentionnĂ©, nous pourrions ajouter la ligne:
print(qprog)
à la fin pour obtenir le code du diagramme Quil, qui est illustré ci-dessous:
H 0 MEASURE 0 [0]
Listing 3. Code Quil pour un générateur de nombres aléatoires.
Peut-ĂȘtre que si quelqu'un commence Ă comprendre Quil, Ă©crivez des circuits quantiques dans un Ă©diteur de texte dans Quil, puis exĂ©cutez le circuit sur QVM Ă l'aide du programme $ inline $ \ textesf {run_quil.py} $ inline $ . Vous pouvez Ă©galement modifier $ inline $ \ textesf {run_quil.py} $ inline $ pour exĂ©cuter le circuit sur QPU. Notez que le compilateur pyQuil (Ă©galement appelĂ© compilateur Quil dans la documentation) convertit le circuit donnĂ© en code Quil qu'un vĂ©ritable ordinateur quantique peut comprendre. Nous en discuterons plus en dĂ©tail dans la section III C.
f. Matériel quantique
Rigetti a un processeur quantique qui peut ĂȘtre utilisĂ© par ceux qui demandent l'accĂšs. Pour demander l'accĂšs, vous devez visiter le site Web de Rigetti et fournir le nom complet, l'adresse e-mail, le nom de l'organisation et une description de la raison de l'accĂšs au QPU. Une fois cela fait, un reprĂ©sentant de l'entreprise vous contactera par e-mail pour planifier un moment pour donner Ă l'utilisateur l'accĂšs au QPU. L'avantage de ce processus de planification, contrairement au systĂšme de mise en file d'attente QISKit, qui sera discutĂ© plus tard, est que de nombreuses tĂąches peuvent ĂȘtre effectuĂ©es dans un intervalle de temps distribuĂ© avec des temps d'exĂ©cution dĂ©terministes, ce qui est essentiel pour les algorithmes variationnels et hybrides. Ces types d'algorithmes envoient des donnĂ©es entre les ordinateurs classiques et quantiques - la nĂ©cessitĂ© d'attendre en ligne rend ce processus beaucoup plus long. L'inconvĂ©nient (Ă©ventuellement) est que les tĂąches ne peuvent ĂȘtre effectuĂ©es Ă aucun moment lorsque le QPU est disponible et qu'il est nĂ©cessaire d'indiquer et de convenir d'un moment prĂ©cis.
Selon l'expĂ©rience de l'auteur, les employĂ©s sont prĂȘts Ă aider et le processus est gĂ©nĂ©ralement couronnĂ© de succĂšs. Le pĂ©riphĂ©rique rĂ©el, dont la topologie est illustrĂ©e Ă la figure 2, se compose de 8 qubits avec la connectivitĂ© du voisin le plus proche. Nous examinerons cet ordinateur plus en dĂ©tail dans la section III B.
g. Simulateur
La machine virtuelle quantique (QVM) est le principal utilitaire utilisĂ© pour exĂ©cuter les circuits quantiques. Ce programme, Ă©crit pour fonctionner sur un processeur classique, reçoit le code Quil et simule le dĂ©veloppement d'un processus sur un vĂ©ritable ordinateur quantique. Pour vous connecter Ă QVM, vous devez enregistrer gratuitement une clĂ© API sur https://www.rigetti.com/forest avec un nom et une adresse e-mail. Ensuite, vous recevrez un e-mail contenant la clĂ© API et l'ID utilisateur qui doivent ĂȘtre configurĂ©s au dĂ©marrage:
pyquilâconfigâsetup
sur la ligne de commande (aprÚs l'installation de pyQuil, bien sûr). Ensuite, il vous sera demandé de saisir les clés de l'e-mail.
Selon la documentation, la plupart des clés d'API permettent d'accéder à des machines virtuelles Java jusqu'à 30 qubits, et vous pouvez demander l'accÚs à plus de qubits. La clé API de l'auteur donne accÚs à 26 qubits (aucune mise à jour n'a été demandée).
De plus, la bibliothĂšque Forest contient un simulateur local Ă©crit en Python et open source, appelĂ© Reference QVM . Il n'est pas aussi productif que QVM, mais les utilisateurs peuvent exĂ©cuter des circuits avec un nombre de qubits limitĂ© par la quantitĂ© de mĂ©moire sur les machines locales. En rĂšgle gĂ©nĂ©rale, les circuits avec moins de 20 qubits peuvent ĂȘtre exĂ©cutĂ©s sur une large gamme d'Ă©quipements. La rĂ©fĂ©rence QVM doit ĂȘtre installĂ©e sĂ©parĂ©ment, ce qui peut ĂȘtre fait avec textesfpip :
pip install referenceqvm
Pour utiliser Reference QVM au lieu de QVM, importez simplement textesfapi de textesfreferenceqvm au lieu de pyQuil:
import referenceapi.api as api

Figure 2. Diagramme schĂ©matique montrant la topologie (connectivitĂ©) d'un Agetti QPU Rigetti Ă 8 qubits. Les Qubits sont marquĂ©s par des entiers 0, 1, ..., 7, et les lignes reliant les qubits indiquent que deux opĂ©rations de qubit peuvent ĂȘtre effectuĂ©es entre ces qubits. Par exemple, nous pouvons exĂ©cuter Controlled- Z sur les qubits 0 et 1, mais pas entre 0 et 2. Pour accomplir ce dernier, le compilateur Quil convertit Controlled- Z (0, 2) dans l'opĂ©ration que le QPU peut effectuer. Ce diagramme est tirĂ© de la documentation pyQuil.QISKitB. QISKit
Le Quantum Information Software Kit, ou QISKit, est un kit de développement logiciel (SDK) open source pour travailler avec le langage quantique OpenQASM et les processeurs quantiques dans la plate-forme IBM Q. Il est disponible pour les langages Python, JavaScript et Swift, mais ici nous ne discutons que Version Python.
a. Configuration requise et installation
QISKit est disponible sur MacOS, Windows et Linux. L'installation de QISKit nécessite Python 3.5+. Les composants Jupyter Notebooks for tutorials et la distribution Python Anaconda 3, qui contient toutes les dépendances nécessaires, sont des composants utiles mais non obligatoires supplémentaires.
La façon la plus simple d'installer QISKit est d'utiliser le gestionnaire de packages pip pour Python. à l'invite de commande, pour installer le logiciel, entrez:
pip install qiskit
Veuillez noter que textesfpip traite automatiquement toutes les dĂ©pendances et installe toujours la derniĂšre version. Les utilisateurs qui pourraient ĂȘtre intĂ©ressĂ©s Ă contribuer Ă QISKit peuvent installer le code source en entrant ce qui suit Ă l'invite de commande, on suppose que git est installĂ©:
git clone https://github.com/QISKit/qiskitâcore cd qiskitâcore python âm pip install âe
Pour plus d'informations sur les dépÎts, consultez la documentation en ligne du guide des dépÎts sur GitHub.
b. Documentation et matériel de formation
La documentation QISKit est disponible sur Internet Ă l' adresse https://qiskit.org/documentation/ . Il contient des instructions d'installation et de configuration, des exemples de programmes et de connexion Ă de vĂ©ritables appareils quantiques, l'organisation du projet, une revue QISKit et une documentation pour les dĂ©veloppeurs. Des informations de base sur l'informatique quantique peuvent Ă©galement ĂȘtre trouvĂ©es pour les utilisateurs qui sont nouveaux dans le domaine. Une trĂšs bonne ressource est un lien vers le SDK, oĂč les utilisateurs peuvent trouver des informations sur la documentation du code source.
QISKit contient Ă©galement un grand nombre de didacticiels dans un rĂ©fĂ©rentiel GitHub sĂ©parĂ© (similaire Ă pyQuil et Grove). Il s'agit notamment des Ătats intriquĂ©s; des algorithmes standard tels que Deutsch Jozh, l'algorithme de Grover, l'estimation de phase et la transformĂ©e de Fourier quantique; Ă©galement des algorithmes plus complexes, tels que la rĂ©solution d'un problĂšme de valeur propre variationnelle quantique et l'application aux hamiltoniens fermions; et mĂȘme des jeux amusants, comme la «bataille navale» quantique. De plus, la bibliothĂšque ACQUA (Algorithms and Circuits for QUantum Applications) contient des algorithmes multidisciplinaires pour la chimie et l'intelligence artificielle avec de nombreux exemples.
Il existe également une documentation trÚs détaillée pour chacun des quatre backends quantiques contenant des informations sur la connectivité, le temps de cohérence et le temps d'utilisation de la porte. Enfin, mentionnez le site Web d' expérience IBM Q et les guides d'utilisation. Le site Web contient une interface graphique pour un circuit quantique dans laquelle les utilisateurs peuvent faire glisser des portes sur un circuit, ce qui est utile pour explorer les circuits quantiques. Les guides de l'utilisateur contiennent plus d'instructions sur l'informatique quantique et le langage QISKit.
c. Syntaxe
La syntaxe QISKit peut ĂȘtre consultĂ©e dans l'exemple de programme suivant. Ici, contrairement Ă pyQuil, vous devez faire une distinction explicite entre les registres quantiques et classiques. Voici un programme pour le schĂ©ma de nombres alĂ©atoires de QISKit:
Listing 4. Code QISKit pour un générateur de nombres aléatoires.
La ligne 2 importe des outils pour crĂ©er des registres quantiques et classiques, un circuit quantique et des fonctions pour exĂ©cuter ce circuit. Ensuite, nous crĂ©ons un registre quantique avec un qubit (ligne 4), un registre classique avec un bit (ligne 5) et un circuit quantique avec ces deux registres (ligne 6). Maintenant que le circuit est créé, nous commençons Ă donner des instructions: Ă la ligne 8, nous appliquons la porte de Hadamard au qubit zĂ©ro dans notre registre quantique (qui est le seul qubit du registre quantique); Ă la ligne 9, nous mesurons ce qubit en un bit classique indexĂ© par zĂ©ro dans notre registre classique (qui est le seul dans le registre classique) [45]. Maintenant que le circuit quantique est construit, exĂ©cutez-le sur la ligne 11 et imprimez le rĂ©sultat sur la ligne 12. Au moyen de la sortie $ inline $ \ textesf {result.get_counts ()} $ inline $ nous obtenons les «calculs» du circuit, c'est-Ă -dire le dictionnaire des donnĂ©es de sortie et combien de fois chaque rĂ©sultat a Ă©tĂ© reçu. Dans notre cas, les seules sorties possibles sont 0 ou 1, et un exemple de la sortie du programme ci-dessus est textesfâČ0âČ:532,âČ1âČ:492 , ce qui indique que nous avons obtenu 532 instances de 0 et 492 instances de 1. (Par dĂ©faut, le nombre de cycles pour dĂ©marrer le circuit appelĂ© textesfcoups dans QISKit, est 1024.)
d. Langue quantique
OpenQASM (le langage d'assemblage quantique ouvert [25], que nous pouvons simplement appeler QASM) est un langage quantique qui fournit des instructions pour de vrais dispositifs quantiques similaires Ă l'assembleur sur les ordinateurs classiques. La base de la syntaxe QASM est textesfgatequbit oĂč textesfgate dĂ©finit le fonctionnement de la porte quantique, et textesfqubit - qubit. QISKit a une fonction pour gĂ©nĂ©rer du code QASM Ă partir d'un schĂ©ma. Dans le schĂ©ma de nombres alĂ©atoires ci-dessus, nous pourrions ajouter une ligne.
print(qcircuit.qasm())
à la fin pour obtenir le code QASM pour le circuit illustré ci-dessous:
OPENQASM 2.0; include âqelib1.incâ; qreg q0[1]; creg c0[1]; h q0[0]; measure q0[0] â> c0[0];
Listing 5. Code OpenQASM pour un générateur de nombres aléatoires.
Les deux premiÚres lignes sont incluses dans chaque fichier QASM. La ligne 3 (4) crée un registre quantique (classique) et les lignes 5 et 6 donnent des instructions pour le circuit. Dans OpenQASM, vous pouvez écrire de petits circuits comme ceux-ci, mais pour les circuits plus grands, il est préférable d'utiliser des outils dans QISKit pour une programmation gratuite et efficace des ordinateurs quantiques.
e. Matériel quantique
Il existe une énorme quantité de documentation pour les backends quantiques pris en charge par QISKit. Ces périphériques incluent IBMQX2 (5 qubits), IBMQX4 (5 qubits), IBMQX5 (16 qubits) et QS1_1 (20 qubits, disponible uniquement pour les membres d'IBM Q Network). La documentation pour tout le monde est disponible sur GitHub. Nous examinerons de plus prÚs IBMQX5 dans la section III B, dont la topologie est illustrée à la figure 3.
f. Simulateur
IBM , . , 12 , , 25 . , III D.

Figure 3. Topologie schĂ©matique d'IBMQX5, tirĂ©e de [30]. Les flĂšches directionnelles indiquent les opportunitĂ©s d'enchevĂȘtrement. Par exemple, nous pourrions effectuer une opĂ©ration (dans QASM) cx Q1, Q2 mais pas une opĂ©ration cx Q2, Q1 . Pour ce faire, le compilateur traduit l'instruction en portes Ă©quivalentes qui s'exĂ©cutent dans la topologie et l'ensemble de portes.ProjectqC. ProjectQ
ProjectQ â IBM, . ProjectQ Thomas HĂ€ner Damien S. Steiger Matthias Troyer ETH Zurich, .
a.
ProjectQ Python (2.7 3.4+). . pip :
python âm pip install ââuser projectq
( ). :
git clone https://github.com/ProjectQâFramework/ProjectQ cd projectq python âm pip install ââuser
, , . ProjectQ GitHub.
b.
ProjectQ . , . - ( , ). â / , . [18, 19] , , - .
c.
ProjectQ , . ProjectQ ( ProjectQ), â / . , :
6. ProjectQ .
2 , 3 . 5 (engine) MainEngine , 6 . 8 9 : 0, . « » . â operation | qubit , H|0> , . , /. pyQuil QISKit, ProjectQ . , qbits[0] 9, , int , 12.
d.
, ProjectQ . ProjectQ IBM, OpenQASM: IBM.
e.
ProjectQ . , IBM ProjectQ.
f.
ProjectQ , C++, , , Python. , ProjectQ ClassicalSimulator (stabilizer circuits), . . , , , CNOT [26]. , , , , . , C++ Simulator .
C++ Simulator ProjectQ . [23]() (, ), 26 5 , 28 20 â . [III D]() 6.
ProjectQ , , . , pyQuil ProjectQ [27], Microsoft QDK Thomas HĂ€ner Damian Steiger ETH Zurich [28], . ( , , QDK ProjectQ C++, .)
Kit de développement quantiqueD. Quantum Development Kit
Rigetti IBM, Microsoft . [29] , , , . , Microsoft , Quantum Development Kit (QDK), , . , QDK «-» Q#, Visual Studio Visual Studio Code 30 . 2018 , -, MacOS, Windows Linux.
a.
, Visual Studio Code , . ( VS Code, Visual Studio . - - , , VS Code.) , QDK , Bash:
dotnet new âi "Microsoft.Quantum.ProjectTemplates::0.2 â*"
QDK GitHub ( , QDK), :
git clone https://github.com/Microsoft/Quantum.git cd Quantum code
b.
â Q#, - , , , Q# . ; , .
c.
Q# . C#: , Python, , C#. , :
// random number generator circuit in QDK operation random (count: Int, initial: Result) : (Int, Int) { body { mutable numOnes = 0; using ( qubits = Qubit[1]) { for (test in 1..count) { Set(initial, qubits[0]); H(qubits[0]); let res = M(qubits[0]); // count the number of ones if (res == One) { set numOnes = numOnes + 1; } } Set(Zero, qubits[0]); } // return statistics return (count â numOnes, numOnes); } }
7. Q# .
, , /, , . . , , , . â .qs Q#, Driver.cs .qs , .csproj , . , 65 . -, , «Quickstart» .
, QDK , . , â (a+b) , . QDK , , ( C , , , , .
d. /
, QDK . Q# / .
e.
QDK , 30 . , QDK ProjectQ, , ProjectQ. ( III D.) Azure , 40 . QDK , .
, QDK (trace simulator), , , , . , . , . , , - , . . . - QDK.
III. Comparaison
Plus loin dans cette section, lorsque les bases de chaque plate-forme ont été examinées, nous comparerons chacune des caractéristiques supplémentaires, y compris le support à la bibliothÚque, l'équipement quantique et les compilateurs quantiques. Nous énumérerons également certaines des fonctionnalités remarquables et utiles de chaque plate-forme.
A. Prise en charge de la bibliothĂšque
« » ( ) (, language.DoQuantumFourierTransform (...) ) . , , 4.
, , , . , , , .
, pyQuil, QISKit QDK . ProjectQ FermiLib, FermiLib, OpenFermion, . , , , ProjectQ. Microsoft QDK , , . , QDK , , QDK, . QISKit .
B.
pyQuil QISKit, . , â â « ». ( ), , / . , , --. IBMQX5 Agave, . - .
a. IBMQX5
IBMQX5 â 16- ( 3). (T2) 31±5 0- , â 89±17 15- . 80 10 . CNOT - , 170- cx q[6], q[7] 348 cx q[3], q[14] . 99,5% ( = 1 â ). - 94,9% . 12,4% 6%. [30].
, , IBM , , . Agave Rigetti, -, , . , .
b. Agave
Agave 8 (transmon) , 2. (T2) 9,2 1- , 15,52 2- . Controlled- Z 118 195 . 96,2% ( , = 1 â ) 93,2%. - 87% - . . - pyQuil.
Algorithm | pyQuil | QISKit | ProjectQ | QDK |
---|
Random Number Generator | (T) | (T) | (T) | (T) |
Teleportation | (T) | (T) | (T) | (T) |
Swap Test | (T) | | | |
Deutsch-Jozsa | (T) | (T) | | (T) |
Grover's Algorithm | (T) | (T) | (T) | (B) |
Quantum Fourier Transform | (T) | (T) | (B) | (B) |
Shor's Algorithm | | | (T) | (D) |
Bernstein Vazirani | (T) | (T) | | (T) |
Phase Estimation | (T) | (T) | | (B) |
Optimization/QAOA | (T) | (T) | | |
Simon's Algorithm | (T) | (T) | | |
Variational Quantum Eigensolver | (T) | (T) | (P) | |
Amplitude Amplification | (T) | | | (B) |
Quantum Walk | | (T) | | |
Ising Solver | (T) | | | (T) |
Quantum Gradient Descent | (T) | | | |
Five Qubit Code | | | | (B) |
Repetition Code | | (T) | | |
Steane Code | | | | (B) |
Draper Adder | | | (T) | (D) |
Beauregard Adder | | | (T) | (D) |
Arithmetic | | | (B) | (D) |
Fermion Transforms | (T) | (T) | (P) | |
Trotter Simulation | | | | (D) |
Electronic Structure (FCI, MP2, HF, etc.) | | | (P) | |
Process Tomography | (T) | (T) | | (D) |
Meyer-Penny Game | (D) | | | |
Vaidman Detection Test | | (T) | | |
Battleships Game | | (T) | | |
Emoji Game | | (T) | | |
Counterfeit Coin Game | | (T) | | |
4. , . « » (T), (D), (B) (P).C.
, , , . / . â , , . QISKit Rigetti, .
IBMQX5 u1 , u2 , u3 et CNOT oĂč

, u1 Rz(Ξ) , u2 et u3 â Rx(Ï/2)

, .

oĂč X et Z â . IBM Rz(Ξ) « », , . , z , z () , .
IBMQX5 3. , CNOT , CNOT

, CNOT QISKit, , , QISKit CNOT, . QISKit , , .
8- Agave Rigetti Rx(kÏ/2) kâZ , Rz(Ξ) Controlled- Z . , , Controlled- Z ( CZ )

Agave 2. QISKit, pyQuil ( ).
, , 5. , pyQuil, Agave, QISKit â IBMQX5. , QISKit (. . ), pyQuil. , - . , IBMQX5 , , pyQuil, . , ( ) - - (, , [32]), . [46], .

5. ( ), pyQuil 8- Agave Rigetti ( ) , QISKit IBM IBMQX5 16- . , Agave, 0, 1 2 ( 2), , IBMQX5, 0, 1 2. , H , Rx Rz . CNOT IBMQX5, Agave â pyQuil CNOT Controlled- Z . ProjectQ.D.
, . , , (. . ) . , , , , , . . QISKit , C++, ProjectQ , B . QVM pyQuil.
a. pyQuil
Rigetti, Quantum Virtual Machine (QVM), , . , API. API 30- , . 16- 10 2,61 . 23 10 56,33 , , QVM API. - - , QVM , QVM , ProjectQ QISKit.
QVM . , . , , . Noise and Quantum Computation pyQuil.
b. QISKit
QISKit , : , , , et . . () . , / . [33], [34-36] . ClassicalSimulator ProjectQ, (stabilizer circuits), .
, 10 10 23,55 . â 239,97 , 12 1000 ( 17 ). , n 2nĂ2n .
C . 25 . 20 . 6 7.
s ProjectQ
ProjectQ C++, . , , 28 , (569,71 ) 20-. [18]. 6 7.

6. QISKit () ProjectQ C++ (), ( ) ( ). , ( ). **B**.
7. , ProjectQ C++ QISKit, . , âX , CNOT, . , . ProjectQ.E.
pyQuil Grove, GitHub, pyQuil. Rigetti , Slack Rigetti Forest. Quil ( ). , pyQuil OpenFermion [37], Python , .
QISKit JavaScript Swift. Python - . Grove, QISKit . , ACQUA QISKit . . IBM , . 3 , QISKit, 80000 , 60 , IBM [31]. QISKit Slack , , . , QISKit .
, ProjectQ . , TikZ TEX . ProjectQ. ProjectQ , . ProjectQ , IBM. , ProjectQ , OpenFermion, .
QDK Windows , 2018 macOS Linux. QDK, . , Q# , , . QDK , , , , , . .
IV.
, , , (-) (-) . â , . / .
, , :
- , , QISKit ( ProjectQ) pyQuil â .
- , , QISKit, pyQuil QDK â .
- , , Python â .
- , C/C#, QDK â .
- , , , ProjectQ â .
- , - , pyQuil â .
- , , Strawberry Fields .
, , . . , , .
- Bernhard Ămer, A procedural formalism for quantum computing , Master's thesis, Department of Theoretical Physics, Technical University of Vienna, 1998.
- S. Bettelli, L. SeraïŹni, T. Calarco, Toward an architecture for quantum programming , Eur. Phys. J. D, Vol. 25, No. 2, pp. 181-200 (2003).
- Peter Selinger (2004), A brief survey of quantum programming languages , in: Kameyama Y., Stuckey PJ (eds) Functional and Logic Programming. FLOPS 2004. Lecture Notes in Computer Science, vol 2998. Springer, Berlin, Heidelberg.
- Benjamin P. Lanyon, James D. WhitïŹeld, Geoff G. Gillet, Michael E. Goggin, Marcelo P. Almeida, Ivan Kassal, Jacob D. Biamonte, Masoud Mohseni, Ben J. Powell, Marco Barbieri, AlaÒn Aspuru-Guzik, Andrew G. White, Towards quantum chemistry on a quantum computer , Nature Chemistry 2 , pages 106-111 (2010), doi:10.1038/nchem.483.
- Jonathan Olson, Yudong Cao, Jonathan Romero, Peter Johnson, Pierre-Luc Dallaire-Demers, Nicolas Sawaya, Prineha Narang, Ian Kivlichan, Michael Wasielewski, AlaÒn Aspuru-Guzik, Quantum information and computation for chemistry , NSF Workshop Report, 2017.
- Jacob Biamonte, Peter Wittek, Nicola Pancotti, Patrick Rebentrost, Nathan Wiebe, Seth Lloyd, Quantum machine learning , Nature volume 549 , pages 195-202 (14 September 2017).
- Seth Lloyd, Masoud Mohseni, Patrick Rebentrost, Quantum principal component analysis , Nature Physics volume 10 , pages 631-633 (2014).
- Vadim N. Smelyanskiy, Davide Venturelli, Alejandro Perdomo-Ortiz, Sergey Knysh, and Mark I. Dykman, Quantum annealing via environment-mediated quantum diffusion , Phys. Rev. Lett. 118 , 066802, 2017.
- Patrick Rebentrost, Brajesh Gupt, Thomas R. Bromley, Quantum computational ïŹnance: Monte Carlo pricing of financial derivatives , arXiv preprint (arXiv:1805.00109v1), 2018.
- IM Georgescu, S. Ashhab, Franco Nori, Quantum simulation , Rev. Mod. Phys. 86, 154 (2014), DOI: 10.1103/RevModPhys.86.153.
- EF Dumitrescu, AJ McCaskey, G. Hagen, GR Jansen, TD Morris, T. Papenbrock, RC Pooser, DJ Dean, P. Lougovski, Cloud quantum computing of an atomic nucleus , Phys. Rev. Lett. 120 , 210501 (2018), DOI: 10.1103/PhysRevLett.120.210501.
- Lukasz Cincio, Yigit Subasi, Andrew T. Sornborger, and Patrick J. Coles, Learning the quantum algorithm for state overlap , arXiv preprint (arXiv:1803.04114v1), 2018
- Patrick J. Coles, Stephan Eidenbenz, Scott Pakin, et al., Quantum algorithm implementations for beginners , arXiv preprint (arXiv:1804.03719v1), 2018.
- Mark Fingerhuth, Open-Source Quantum Software Projects , accessed May 12, 2018.
- Quantiki: List of QC Simulators , accessed May 12, 2018
- R. Smith, MJ Curtis and WJ Zeng, A practical quantum instruction set architecture , 2016.
- QISKit, originally authored by Luciano Bello, Jim Challenger, Andrew Cross, Ismael Faro, Jay Gambetta, Juan Gomez, Ali Javadi-Abhari, Paco Martin, Diego Moreda, Jesus Perez, Erick Winston, and Chris Wood, https://github.com/QISKit/qiskit-sdk-py .
- Damian S. Steiger, Thomas HĂ€ner, and Matthias Troyer ProjectQ: An open source software framework for quantum computing , 2016.
- Thomas HĂ€ner, Damian S. Steiger, Krysta M. Svore, and Matthias Troyer A software methodology for compiling quantum programs , 2016.
- The Quantum Development Kit by Microsoft, homepage: https://www.microsoft.com/en â us/quantum/development-kit, github: https://github.com/Microsoft/Quantum .
- Michael A. Nielsen and Isaac L. Chuang, Quantum Computation and Quantum Information 10th Anniversary Edition, Cambridge University Press, 2011.
- Doug Finke, Education , Quantum Computing Report, https://quantumcomputingreport.com/resources/education/ , accessed May 26, 2018.
- All code in this paper was run and tested on a Dell XPS 13 Developer Edition laptop running 64 bit Ubuntu 16.04 LTS with 8 GB RAM and an Intel Core i7-8550U CPU at 1.80 GHz. Programs were run primarily from the command line but the Python developer environment Spyder was also used for Python programs and Visual Studio Code was used for C# (Q#) programs.
- Forest: An API for quantum computing in the cloud, https://www.rigetti.com/index.php/forest , accessed May 14, 2018.
- Andrew W. Cross, Lev S. Bishop, John A. Smolin, Jay M. Gambetta, Open quantum assembly language , 2017.
- Scott Aaronson, Daniel Gottesman, Improved Simulation of Stabilizer Circuits , Phys. Rev. A 70 , 052328, 2004.
- pyQuil Lisence, github.com/rigetticomputing/pyquil/blob/master/LICENSE#L204 , accessed June 7, 2018.
- Microsoft Quantum Development Kit License, marketplace.visualstudio.com/items/quantum.DevKit/license , accessed June 7, 2018.
- Hao Zhang, Chun-Xiao Liu, Sasa Gazibegovic, et al. Quantized Majorana conductance , Nature 556 , 74-79 (05 April 2018).
- 16-qubit backend: IBM QX team, âibmqx5 backend speciïŹcation V1.1.0,â (2018). Retrieved from https://ibm.biz/qiskit-ibmqx5 and https://quantumexperience.ng.bluemix.net/qx/devices on May 23, 2018.
- Talia Gershon, Celebrating the IBM Q Experience Community and Their Research , March 8, 2018.
- M. Reck, A. Zeilinger, HJ Bernstein, and P. Bertani, Experimental realization of any discrete unitary operator , Physical Review Letters, 73, p. 58, 1994.
- Ryan LaRose, Distributed memory techniques for classical simulation of quantum circuits , arXiv preprint (arXiv:1801.01037v1), 2018.
- Thomas Haner, Damian S. Steiger, 0.5 petabyte simulation of a 45-qubit quantum circuit , arXiv preprint (arXiv:1704.01127v2), September 18, 2017.
- Jianxin Chen, Fang Zhang, Cupjin Huang, Michael Newman, Yaoyun Shi, Classical simulation of intermediate-size quantum circuits , arXiv preprint (arXiv:1805.01450v2), 2018.
- Alwin Zulehner, Robert Wille, Advanced simulation of quantum computations , arXiv preprint ( arXiv:1707.00865v2 ), November 7, 2017.
- Jarrod R. McClean, Ian D. Kivlichan, Kevin J. Sung, et al., OpenFermion: The electronic structure package for quantum computers , arXiv:1710.07629, 2017.
- Nathan Killoran, Josh Izaac, Nicols Quesada, Ville Bergholm, Matthew Amy, Christian Weedbrook, Strawberry Fields: A Software Platform for Photonic Quantum Computing , arXiv preprint (arXiv:1804.03159v1), 2018.
- IonQ website, https://ionq.co/ , accessed June 15, 2018.
- D-Wave: The quantum computing company, https://www.dwavesys.com/home , accessed June 20, 2018.
- 4 2018 Rigetti 20- , . , 8- «- ». , 20- (, , ).
- IBMQ Network , 2017 â JP Morgan Chase , Daimler , Samsung , Honda , Oak Ridge National Lab , â , 2018 â Zapata Computing , Strangeworks , QxBranch , Quantum Benchmark , QC Ware , Q-CTRL , Cambridge Quantum Computing (CQC) , 1QBit . North Carolina State University , IBM Q Hub, University of Oxford University of Melbourne . https://www.research.ibm.com/ibmq/network/ .
- , - - . QISKit, ACQUA , pyQuil.
- pyQuil : , from pyquil.gates import H, MEASURE . pyquil.gates , , , .
- , () . , () , , .
- IBM, 31 2018 , « » Python Cython, .
A, . Players Quantum Computing Report [22]. , , . / â .
a. Strawberry Fields
Xanadu , , Strawberry Fields Python , [38]. Xanadu «qumodes» ( ), , , . Strawberry Fields Numpy TensorFlow, Blackbird. GitHub, , , , . , Xanadu https://www.xanadu.ai/ , .
b. IonQ
IonQ â -, College Park , . IonQ , . 171 Yb , IonQ T2 () 15- , T2 1 . , T1 ( ) 20 000 , 10â4 . , -- - , «» . , .
IonQ , IonQ . . , - [39].
c. D-Wave Systems
D-Wave [40], , . D-Wave, 1999 , , , ,
D-Wave , â 2048 , Matlab, C/C++ Python . /, D-Wave . D-Wave .
BB.
ProjectQ C++. Dell XPS 13 Developer Edition 64- Ubuntu 16.04 LTS 8 Intel Core i7-8550U 1,80 .
, , 7. , QISKit â .
CC. :
. , QDK , , . â , â â . . , , , â , .
, , . , QISKit.

8. , circuit_drawer , QISKit v0.5.4.pyQuil
QISKit
ProjectQ
Quantum Developer Kit
// ============================================================================= // teleport.qs // // Teleportation circuit in QDK. // ============================================================================= operation Teleport(msg : Qubit, there : Qubit) : () { body { using (register = Qubit[1]) { // get auxiliary qubit to prepare for teleportation let here = register[0]; // main circuit H(here); CNOT(here, there); CNOT(msg, here); H(msg); // conditional operations if (M(msg) == One) { Z(there); } if (M(here) == One) { X(there); } // reset the "here" qubit Reset(here); } } } operation TeleportClassicalMessage(message : Bool) : Bool { body { mutable measurement = false; using (register = Qubit[2]) { // two qubits let msg = register[0]; let there = register[1]; // encode message to send if (message) { X(msg); } // do the teleportation Teleport(msg, there); // check what message was sent if (M(there) == One) { set measurement = true; } // reset all qubits ResetAll(register); } return measurement; } }