Package: qpz-atomics
OverviewThis library provides atomic functions implementations for easing the
development of quantum networking protocols. The library provides
functions in a simulation backend agnostic way thanks to a thin wrapping
of their basic functionalities. The various atomic function
implementations are dispatched in several submodules depending on their
anticipated use. The surrent submodules classification is:mapping(the thing wrapper around a simulation backend)gate(everything that applies a fixed quantum unitary over 1 or 2
qubits)prep(operations related to prepare given sets of quantum states)meas(operations related to measure quantum subsystems according
to some fixed POVM)test(operations related to testing that one or several quantum
subsystems have a given property)util(useful operations that might not be directly related to a
specific quantum operation but which are good to have)tran(transport layer protocols which might not be readily
available for all backends or which would need to include more robust
implementations)Functionality tests are being developed for the atomic functions relying
on thehypothesispackage. The test tend to follow the cryptographic
approach of “correctness”. The “security” part is usually not performed
as this most of the times involves checking indistinguishability of
probability distributions…StatusImplemented atomic functions and planningNameImplementationDoc stringTestSubmoduleCommentSending qubit (given by simulation backend)DNEOKNAsimulaqron mappingReceive qubit (given by simulation backend)DNEOKNAsimulaqron mappingLocal Clifford Gates (CNOT, H, Pauli’s)DNEOKNAsimulaqron mappingLocal non-Clifford Gates (T, Tinv)DNEOKNAsimulaqron mappingCZ gateDNEOKTDOgateself inverse, and corresponds to classically controlled Z for comp. basis controlCSWAP gateDNEOKTDOgateCreation Pauli eigenstatesDNEOKDNEprepCreation and broadcast of n-party GHZ stateDNEOKDNEprepSingle qubit equatorial plane preparationDNEOKTDOprepCreation and broadcast of n-party stabilizer statesNXTprepQFactoryLTRprepProjections onto Pauli eigenstatesDNEOKOKmeasSingle qubit equatorial plane measurementTDOmeasMulti qubit POVMLTRmeasQuantum One-Time-Pad encode / decodeDNEOKOKpresBB84 encode / decode is a subset of QOTP encode / decodeNANANANACollective BB84 encodingDNGpresSwap TestDNEOKTDOtestVerification of stabilizer statetestQuantum RNGDNECheckTDOutilInformation reconciliationLTRutilClassical error correctionLTRutilQuantum error correctionLTRutilPrivacy amplificationLTRutilQuantum one-way functionNXTutilWeak string erasureNXTTeleportation sendTDOtranTeleportation receiveTDOtranQuantum authenticated channelLTRSecure classical broadcast channelLTRClassical authenticated channelLTRDesign principlesThere exist many different quantum computing backends. The idea with
this library was to abstract them away so that code running written
using the library could be run on other backends, provided that the rest
of the code not composed of functions defined by the library is not
backend specific.To do this, we instantiate the library by giving it a mapping and a
node. The mapping is the translation of the backend specific way of
calling elementary quantum operations, while the node is the actual
quantum registers that are available to perform the computation. The
node usually contains also some additional functions such as sending
qubits to other nodes, receiving and sending entanglement etc. The
differences have been abstracted away with the mappings forsimulaqronandqunetsim. Other mappings have been considered
and used but not yet made available most notably forNetsquid.Feel free to add functions, or code new mappings by forking and
pull-requesting insertion of your additions. Please keep us updated with
your work so that we inform you of changes that could be breaking
things.UsageLook at theexamples/examples.pyfile. The library is instantiated
for each node (as if the nodes were independent computers, each loading
its version of the library).Other sources of inspirations are the tests defined in thetestsdirectoryNew atomic functions will be added following the list established by
extracting atomic functions from the Quantum Protocol Zoo.TestingTests can be run usingpython setup.py testat the root of the
repository.The repository includes a tests directory that contains the filetest_qpz_atomics.pywhich gathers all the tests implemented. It is
using thepytestpackage to launch the tests and gather statistics,
while being based onhypothesisfor generating examples.For the tests to run, you need to have a quatum network simulator
available and running. We have chosen to implement the tests usingsimulaqronas a backend, hence requiring a runningsimulaqroninstance. This can
be done typing the following:simulaqronsetmax-qubits100simulaqronstartOther backends could be used provided the tests are rewritten and the
required backend is available and properly mapped in the library.AcknowledgmentsThis project is part of Laboratoire d’Informatique Paris 6 - Sorbonne
Université / CNRS - Quantum Information Team. It is funded and is part
of the Quantum Internet Alliance European Project.