基于搜索的量子合成/编译

qsearch的Python项目详细描述


run tests

Q搜索

基于a*和数值优化的量子门综合算法的实现。它依赖于NumPy和{a2}。它可以导出QiskitOpenQASM的代码。在

这是本文Heuristics for Quantum Compiling with a Continuous Gate Set中描述的算法的实现。在

这些结果显示了qsearch如何提供最佳或接近最优的结果。我们将结果与UniversalQ Compiler进行比较。在

Circuit# of QubitsRef #CNOT LinearCNOT RingUQ (CNOT Ring)CNOT Linear Unitary DistanceCNOT Ring Unitary Distance
QFT367*6*151.33 * 10-142.22 * 10-16
Fredkin388791.76 * 10-140.0
Toffoli368691.14 * 10-140.0
Peres3576191.13 * 10-140.0
HHL3N/A3*3*161.25 * 10-140.0
Or3686101.72 * 10-140.0
EntangledX342,3,42,3,491.26 * 10-140.0
TFIM_3_33444170.00.0
TFIM_6_33866174.44 * 10-160.0
TFIM_42_335666178.88 * 10-160.0
TFIM_60_338066176.66 * 10-160.0
QFT4N/A13*896.66 * 10-16
TFIM_30_446011879.08 * 10-11
IBM Challenge4N/A4DNR0.0

由于一些局部优化程序偶尔会因一些最小计数而导致CNOT*卡在局部电路中。在这些情况下,列出了10个最佳运行时间。这些电路的CNOT计数偶尔比列出的多1个。“纠缠门”是一个参数化的门,对于某些参数的组合,我们能够用比手工优化的一般解更少的CNOTs得到解。在

安装

这是一个python包,可以使用pip安装。您需要至少3.6版本的Python。qsearch编译器目前运行在macOS、Linux(包括the Windows Subsystem for Linux)和Windows(在Windows上性能要差得多)。您可以使用以下方法从PyPi安装它:

pip3 install qsearch

您也可以从git存储库安装:

^{pr2}$

或者下载并安装:

git clone https://github.com/BQSKit/qsearch
pip3 install --upgrade ./qsearch

如果对本地副本进行更改,则可以重新安装程序包:

pip3 install --upgrade ./qsearch

安装后,您可以像导入任何其他python包一样导入库:

import qsearch

快速入门:qsearch项目

使用qsearch库的最简单方法是使用项目。创建项目时,提供一个将在其中创建目录以包含项目文件的路径。在

import qsearch
myproject = qsearch.Project("desired/path/to/project/directory")

然后可以添加单元进行编译,并设置编译器属性。酉矩阵应使用dtype="complex128"作为numpyn数组提供。在

myproject.add_compilation("gate_name", gate_unitary)
myproject["compiler_option"] = value

配置好项目后,可以通过调用run()来启动项目。编译器使用自动检查点系统,因此,如果在运行过程中被终止,可以通过再次调用run()来恢复。在

myproject.run()

项目完成后,您可以获得OpenQASM输出:

myproject.assemble("gate_name") # This will return a string of OpenQASM
myproject.assemble("gate_name", write_location="path/to/output/file") # This will write the qasm to the specified path.

无项目编译

如果不想使用项目,可以直接使用SearchCompiler类。在

import qsearch
compiler = qsearch.SearchCompiler()
result = compiler.compile(target=target_unitary)

SearchCompiler类和compile函数可以使用额外的参数来进一步配置编译器。返回值是一个字典,它包含表示已实现电路的酉、电路结构的qsearch.gates.Gate表示和电路结构的参数向量。在

关于终结性的注记

在命名量子位时,我们使用了使用big-endian的物理约定。一些量子程序,包括IBM的Qiskit,使用little endian。这意味着您需要颠倒为Qiskit设计的一元货币的尾数,以便使用我们的代码,反之亦然。我们提供了一个对numpy矩阵执行endian反转的函数:

little_endian = qsearch.utils.endian_reverse(big_endian) # you can use the same function to convert in the other direction as well

文档和示例

文档和API参考可以找到on readthedocs。在

还可以看看examples!在

法律/版权信息

请阅读我们的LICENSE

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

推荐PyPI第三方库


热门话题
JavaSpring事件发射器停止在新连接上向以前的客户端发送事件   javascript如何在Ionic 4中向选项卡添加模式?   java Hibernate hbm2ddl。自动更新不会删除mysql中的列   java如何使用instanceof根据子类类型对子类执行不同的操作?   java在JPanel中动态添加JLabel(重新验证无效)   java我的计算机上可以有两个版本的JDK吗?   spring在Java中管理每个表单提交的版本   java获取装饰器对象的所有类型:包装对象的类型和包装对象的类型   多线程Java区分可运行线程类型   javajavax。网ssl。SSLexException:填充长度无效   java JSP将单引号和双引号显示为符号   java当使用TestNG DataProvider时,有没有办法从同一个Excel工作表中读取和写入参数?   java不同的枚举哈希代码生成?   java ASM AdviceAdapter onMethodEnter打印所有参数   JavaStruts2(版本2.3.28)只接受注册的区域设置   excel如何使用Java中的Apache POI库对数据透视表数据进行排序   如果没有Kotlin库,是否可以将Kotlin翻译成Java?   安卓中用于JSON数据的java Junit