量子网络与信道模拟器
SQUANCH的Python项目详细描述
量子网络和信道模拟器
用于量子网络和信道的模拟器是一个开源的python库,用于创建分布式量子信息处理的并行模拟。该框架包含了通用量子计算模拟器的许多特性,但它是专门为模拟量子网络而优化的。它包括允许用户轻松设计复杂多方量子网络的功能、用于建模噪声量子信道的可扩展类以及用于性能模拟的多处理numpy后端。
下面显示了SQUANCH
中可用模块的示意图。(有关详细信息,请参阅documentation或whitepaper。)
SQUANCH
是美国电话电报公司和加州理工学院之间的智能量子网络和技术(a3})计划的一部分。
文档
此软件包的文档可以在documentation website或pdf manual上找到。我们鼓励感兴趣的用户阅读SQUANCH
平台的白皮书,“量子网络和信道的分布式模拟框架”(arxiv:1808.07047),该白皮书提供了框架的概述和量子信息的入门知识。
安装
您可以使用python包管理器直接安装squanch,pip
:
pip install squanch
如果您没有pip
,可以使用easy_install pip
获得它。
演示
各种量子协议的演示可以在demos文件夹和documentation:
示例:量子拦截攻击
作为本自述中的一个示例,让我们考虑一个场景,alice希望将数据发送给bob。为了安全起见,她通过quantum superdense coding传送信息。在下面的电路图中,我们有四个^{
- 查理生成纠缠的量子比特对,并将其发送给爱丽丝和鲍勃。
- 爱丽丝收到查理的古比特。她将两位数据编码后发送给鲍勃。
- 鲍勃从查理和爱丽丝那里收到了量子比特。他对它们进行联合操作,并对它们进行测量,以重建爱丽丝的两条信息。
- 不过,第四个探员伊芙想知道爱丽丝的数据。她截取爱丽丝发给鲍勃的每一个量子位,测量它,然后再传送给鲍勃,希望他不会注意到。
下面给出了这个场景在SQUANCH
中的实现。
importnumpyasnpimportmatplotlib.imageasimagefromsquanchimport*classCharlie(Agent):'''Charlie sends Bell pairs to Alice and Bob'''defrun(self):forqsysinself.qstream:a,b=qsys.qubitsH(a)CNOT(a,b)self.qsend(alice,a)self.qsend(bob,b)classAlice(Agent):'''Alice tries to send data to Bob, but Eve intercepts'''defrun(self):for_inself.qstream:bit1=self.data.pop(0)bit2=self.data.pop(0)q=self.qrecv(charlie)ifbit2==1:X(q)ifbit1==1:Z(q)# Alice unknowingly sends the qubit to Eveself.qsend(eve,q)classEve(Agent):'''Eve naively tries to intercept Alice's data'''defrun(self):bits=[]for_inself.qstream:a=self.qrecv(alice)bits.append(a.measure())self.qsend(bob,a)self.output(bits)classBob(Agent):'''Bob receives Eve's intercepted data'''defrun(self):bits=[]for_inself.qstream:a=self.qrecv(eve)c=self.qrecv(charlie)CNOT(a,c)H(a)bits.extend([a.measure(),c.measure()])self.output(bits)# Load Alice's data (an image) and serialize it to a bitstreamimg=image.imread("docs/source/img/foundryLogo.bmp")bitstream=list(np.unpackbits(img))# Prepare an appropriately sized quantum streamqstream=QStream(2,int(len(bitstream)/2))out=Agent.shared_output()# Instantiate agentsalice=Alice(qstream,out,data=bitstream)bob=Bob(qstream,out)charlie=Charlie(qstream,out)eve=Eve(qstream,out)# Connect the agents to form the networkalice.qconnect(bob)alice.qconnect(eve)alice.qconnect(charlie)bob.qconnect(charlie)bob.qconnect(eve)# Run the simulationSimulation(alice,eve,bob,charlie).run()# Display the images Alice sent, Eve intercepted, and Bob received# (Plotting code omitted for brevity; results shown below)
引文
如果您正在使用SQUANCH
进行研究,请引用我们的白皮书:
B. Bartlett, "A distributed simulation framework for quantum networks and channels," arXiv: 1808.07047 [quant-ph], Aug. 2018.