量子网络与信道模拟器

SQUANCH的Python项目详细描述


量子网络和信道模拟器

用于量子网络和信道的模拟器是一个开源的python库,用于创建分布式量子信息处理的并行模拟。该框架包含了通用量子计算模拟器的许多特性,但它是专门为模拟量子网络而优化的。它包括允许用户轻松设计复杂多方量子网络的功能、用于建模噪声量子信道的可扩展类以及用于性能模拟的多处理numpy后端。

下面显示了SQUANCH中可用模块的示意图。(有关详细信息,请参阅documentationwhitepaper。)

Overview of SQUANCH framework structure

SQUANCH是美国电话电报公司和加州理工学院之间的智能量子网络和技术(a3})计划的一部分。

文档

此软件包的文档可以在documentation websitepdf 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)

Images sent by Alice, intercepted by Eve, and received by Bob

引文

如果您正在使用SQUANCH进行研究,请引用我们的白皮书:

B. Bartlett, "A distributed simulation framework for quantum networks and channels," arXiv: 1808.07047 [quant-ph], Aug. 2018.

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何隐藏actionbar和显示选项卡   java将触摸事件从回收器传递到其父LinearLayout   springboot应用程序中的java enable XFrameOptions标头(不含spring security)   java将十进制128序列化为JSON   java将给定时间转换为GMT   java如何解决SSL握手异常   java哪些平台的缓冲区大小有限?   java如何使用IDE在storm production集群中提交拓扑   Android Javaİmageview的进展   JAVA网使用Spring PathMatchingResourcePatternResolver时出现URI语法异常   java如果有人试图访问我的JSP页面,如何首先显示登录页面?   带水平滚动的java嵌套回收视图   java有可能将Hashmap get和put结合起来吗?   java为什么在计算两毫秒时间戳之间的差时使用模运算符?   从字符串Java中提取葡萄牙语日期   java为什么dispatchTouchEvent避免在屏幕上单击?