使用ZXcalculus的量子电路重写和优化库

pyzx的Python项目详细描述


PyZX公司

Unitary FundCQC SupportPyPI version

PyZX(发音为Pisics)是一个Py实现ZX微积分理论的工具,用于创建、可视化和自动重写大规模量子电路。请观看this 2-minute video进行简短介绍。在

PyZX目前允许您:

  • QASMQuipperQuantomatic文件格式读入量子电路。在
  • 用ZX演算重写电路为伪正规形式。在
  • 从这些简化图中提取新的简化电路。在
  • 可视化ZX图形,并使用Matplotlib、Quantomatic或作为TikZ文件重写,以便在LaTeX文档中使用。在
  • 以QASM、QC或QUIPPER格式输出优化后的电路。在

您可以尝试在浏览器内演示,其中显示了这些功能here。在

关于ZX微积分

ZX图是一种张量网络,由称为spider的线性映射组合而成。蜘蛛有两种类型:Z型蜘蛛(在PyZX中用绿点表示)和X型蜘蛛(用红点表示)。一组量子位之间的每一个线性映射都可以用ZX图表示。 ZX演算是ZX图的一组重写规则。有各种各样的重写规则。然而,PyZX只使用关于ZX演算的Clifford片段的重写规则。重要的是,对于Clifford图,这组重写规则是complete,这意味着Clifford映射的两个表示可以被重写成另一个,当且仅当它们表示的两个线性映射相等时。在

Here是一个提供有关ZX微积分的资源和信息的网站。有关ZX演算的简短介绍,请参见this paper,而要获得完整的概述,我们推荐this book。PyZX广泛地使用了两个派生重写规则,称为local compensationpivoting。有关这些操作的更多信息可以在this paper中找到。在

安装

如果您希望在其他项目中使用PyZX作为Python模块,我们建议通过pip安装:

    pip install pyzx

如果您想使用演示或基准电路,您应该通过克隆git存储库从源代码安装PyZX。在

PyZX没有严格的依赖关系,尽管有些功能需要numpy。PyZX是为了与Jupyter良好地交互而构建的,因此我们另外建议您安装Jupyter和matplotlib。在

使用

请参阅Documentation,以获得PyZX特性的完整概述。在

如果您已经安装了Jupyter,那么您可以使用demos文件夹中的一个演示笔记本来演示PyZX的功能。在

以下是一些Python代码示例,用于生成随机电路、优化电路并最终显示:

^{pr2}$

PyZX也可以从命令行运行。例如,为了优化电路,您可以运行 python -m pyzx opt input_circuit.qasm

归属

如果你想在学术著作中引用PyZX,请引用accompanying paper

  @inproceedings{kissinger2020Pyzx,
    author = {Kissinger, Aleks and van de Wetering, John},
    title = {{PyZX: Large Scale Automated Diagrammatic Reasoning}},
    year = {2020},
    booktitle = {{\rm Proceedings 16th International Conference on} Quantum Physics and Logic, {\rm Chapman University, Orange, CA, USA., 10-14 June 2019}},
    editor = {Coecke, Bob and Leifer, Matthew},
    series = {Electronic Proceedings in Theoretical Computer Science},
    volume = {318},
    pages = {229-241},
    publisher = {Open Publishing Association},
    doi = {10.4204/EPTCS.318.14}
}

这架飞机上写着PYZX: PYZX

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

推荐PyPI第三方库


热门话题
java检查整数是0还是检查变量是null更好?   java Android Kotlin(初学者)使用File(),并从ACTION\u GET\u内容返回Uri   java JavaFx在“内部场景”和根场景之间切换   spring将XMLBean配置转换为java配置   java JPA HIBERNATE映射列两次(embeddedID和POJO)   c#单态模式模型在什么情况下适用?   java请求。getRemoteUser在特定时间后返回null?   spring boot中PUT api控制器的java my单元测试用例失败   java在字符串中互换地解析和替换值   java Android JNI在应用程序中检测到错误:调用JNI GetMethodID时出现挂起异常   JavaSpringDataMongo:使用非简单键持久化映射   爪哇玻璃鱼连接被拒绝   java如何在用户注册时发送特定电子邮件id的自动回复?   Java列表:实例化时和之后的赋值之间的差异