ffsim 0.0.74__tar.gz → 0.0.75__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {ffsim-0.0.74 → ffsim-0.0.75}/PKG-INFO +1 -1
- ffsim-0.0.75/docs/_static/logo-dark.svg +1 -0
- ffsim-0.0.75/docs/_static/logo.svg +1 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/docs/conf.py +6 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/docs/how-to-guides/qiskit-lucj.ipynb +93 -30
- {ffsim-0.0.74 → ffsim-0.0.75}/pyproject.toml +1 -1
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/qiskit/__init__.py +6 -3
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/qiskit/transpiler_passes/__init__.py +4 -0
- ffsim-0.0.75/python/ffsim/qiskit/transpiler_passes/lucj_preset_pass_manager.py +521 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/states/slater.py +85 -32
- {ffsim-0.0.74 → ffsim-0.0.75}/src/gates/orbital_rotation.rs +2 -0
- ffsim-0.0.75/tests/python/qiskit/transpiler_passes/lucj_preset_pass_manager_test.py +223 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/tests/python/states/slater_test.py +58 -32
- {ffsim-0.0.74 → ffsim-0.0.75}/uv.lock +1 -1
- {ffsim-0.0.74 → ffsim-0.0.75}/.dockerignore +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/.github/workflows/build-and-release.yml +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/.github/workflows/check.yml +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/.github/workflows/docker.yml +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/.github/workflows/docs-dev.yml +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/.github/workflows/docs-release.yml +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/.github/workflows/test-latest-versions.yml +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/.github/workflows/test-minimum-versions.yml +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/.gitignore +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/.pre-commit-config.yaml +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/CONTRIBUTING.md +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/Cargo.lock +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/Cargo.toml +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/Dockerfile +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/LICENSE +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/README.md +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/compose.yaml +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/docs/_templates/autosummary/class.rst +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/docs/explanations/diag-coulomb-hamiltonian.ipynb +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/docs/explanations/double-factorized.ipynb +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/docs/explanations/fermion-operator.ipynb +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/docs/explanations/hamiltonians.ipynb +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/docs/explanations/index.md +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/docs/explanations/lucj.ipynb +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/docs/explanations/orbital-rotation.ipynb +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/docs/explanations/protocols.ipynb +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/docs/explanations/qubit-gate-decompositions.ipynb +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/docs/explanations/state-vectors-and-gates.ipynb +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/docs/explanations/variational-ansatzes.ipynb +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/docs/generate_api_docs.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/docs/how-to-guides/compute-expectation-values.ipynb +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/docs/how-to-guides/entanglement-forging.ipynb +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/docs/how-to-guides/index.md +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/docs/how-to-guides/qiskit-circuits-sim.ipynb +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/docs/how-to-guides/qiskit-merge-orbital-rotations.ipynb +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/docs/how-to-guides/qiskit-trotter.ipynb +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/docs/how-to-guides/sample-from-state-vectors.ipynb +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/docs/how-to-guides/sample-slater.ipynb +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/docs/how-to-guides/simulate-trotter-hubbard.ipynb +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/docs/how-to-guides/simulate-trotter-mol-ham.ipynb +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/docs/how-to-guides/simulate-vqe.ipynb +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/docs/index.md +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/docs/install.md +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/docs/tutorials/double-factorized-trotter.ipynb +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/docs/tutorials/index.md +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/__init__.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/_cistring.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/_lib.pyi +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/_slow/__init__.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/_slow/contract/__init__.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/_slow/contract/diag_coulomb.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/_slow/contract/num_op_sum.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/_slow/fermion_operator.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/_slow/gates/__init__.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/_slow/gates/diag_coulomb.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/_slow/gates/num_op_sum.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/_slow/gates/orbital_rotation.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/contract/__init__.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/contract/diag_coulomb.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/contract/num_op_sum.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/contract/one_body.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/contract/two_body.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/gates/__init__.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/gates/basic_gates.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/gates/diag_coulomb.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/gates/num_op_sum.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/gates/orbital_rotation.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/gates/quad_ham.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/hamiltonians/__init__.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/hamiltonians/diagonal_coulomb_hamiltonian.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/hamiltonians/double_factorized_hamiltonian.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/hamiltonians/molecular_hamiltonian.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/hamiltonians/single_factorized_hamiltonian.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/init_cache.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/linalg/__init__.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/linalg/double_factorized_decomposition.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/linalg/givens.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/linalg/linalg.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/linalg/predicates.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/linalg/util.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/molecular_data.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/operators/__init__.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/operators/common_operators.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/operators/coupled_cluster.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/operators/fermi_hubbard.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/operators/fermion_action.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/operators/fermion_operator.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/optimize/__init__.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/optimize/_util.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/optimize/linear_method.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/protocols/__init__.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/protocols/apply_unitary_protocol.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/protocols/approximate_equality_protocol.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/protocols/diagonal_protocol.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/protocols/fermion_operator_protocol.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/protocols/linear_operator_protocol.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/protocols/trace_protocol.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/py.typed +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/qiskit/gates/__init__.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/qiskit/gates/diag_coulomb.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/qiskit/gates/diag_coulomb_trotter_split_op.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/qiskit/gates/double_factorized_trotter.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/qiskit/gates/givens_ansatz.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/qiskit/gates/num_num_ansatz.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/qiskit/gates/num_op_sum.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/qiskit/gates/orbital_rotation.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/qiskit/gates/slater_determinant.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/qiskit/gates/ucj.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/qiskit/jordan_wigner.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/qiskit/sampler.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/qiskit/sim.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/qiskit/transpiler_passes/drop_negligible.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/qiskit/transpiler_passes/merge_orbital_rotations.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/qiskit/transpiler_stages.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/qiskit/util.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/random/__init__.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/random/random.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/states/__init__.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/states/bitstring.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/states/dimensions.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/states/product_state_sum.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/states/rdm.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/states/sample_slater.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/states/spin.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/states/states.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/states/wick.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/testing/__init__.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/testing/testing.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/trotter/__init__.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/trotter/_util.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/trotter/diagonal_coulomb_split_op.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/trotter/double_factorized.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/trotter/qdrift.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/variational/__init__.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/variational/givens.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/variational/hopgate.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/variational/multireference.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/variational/num_num.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/variational/orbital_optimization.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/variational/uccsd.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/variational/ucj_angles_spin_balanced.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/variational/ucj_spin_balanced.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/variational/ucj_spin_unbalanced.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/variational/ucj_spinless.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/python/ffsim/variational/util.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/src/contract/diag_coulomb.rs +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/src/contract/mod.rs +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/src/contract/num_op_sum.rs +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/src/fermion_operator.rs +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/src/gates/diag_coulomb.rs +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/src/gates/mod.rs +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/src/gates/num_op_sum.rs +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/src/gates/phase_shift.rs +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/src/jordan_wigner.rs +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/src/lib.rs +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/src/linalg/givens.rs +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/src/linalg/mod.rs +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/tests/python/__init__.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/tests/python/_slow/__init__.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/tests/python/_slow/contract/__init__.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/tests/python/_slow/contract/diag_coulomb_test.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/tests/python/_slow/contract/num_op_sum_test.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/tests/python/_slow/gates/__init__.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/tests/python/_slow/gates/diag_coulomb_test.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/tests/python/_slow/gates/num_op_sum_test.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/tests/python/_slow/gates/orbital_rotation_test.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/tests/python/contract/__init__.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/tests/python/contract/diag_coulomb_test.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/tests/python/contract/num_op_sum_test.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/tests/python/contract/two_body_test.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/tests/python/gates/__init__.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/tests/python/gates/basic_gates_test.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/tests/python/gates/diag_coulomb_test.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/tests/python/gates/num_op_sum_test.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/tests/python/gates/orbital_rotation_test.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/tests/python/gates/quad_ham_test.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/tests/python/hamiltonians/__init__.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/tests/python/hamiltonians/diagonal_coulomb_hamiltonian_test.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/tests/python/hamiltonians/double_factorized_hamiltonian_test.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/tests/python/hamiltonians/molecular_hamiltonian_test.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/tests/python/hamiltonians/single_factorized_hamiltonian_test.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/tests/python/linalg/__init__.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/tests/python/linalg/double_factorized_decomposition_test.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/tests/python/linalg/givens_test.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/tests/python/linalg/linalg_test.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/tests/python/linalg/util_test.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/tests/python/molecular_data_test.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/tests/python/operators/__init__.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/tests/python/operators/common_operators_test.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/tests/python/operators/coupled_cluster_test.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/tests/python/operators/fermi_hubbard_test.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/tests/python/operators/fermion_action_test.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/tests/python/operators/fermion_operator_test.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/tests/python/optimize/__init__.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/tests/python/optimize/linear_method_test.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/tests/python/protocols/__init__.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/tests/python/protocols/trace_protocol_test.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/tests/python/qiskit/__init__.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/tests/python/qiskit/gates/__init__.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/tests/python/qiskit/gates/diag_coulomb_test.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/tests/python/qiskit/gates/diag_coulomb_trotter_split_op_test.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/tests/python/qiskit/gates/double_factorized_trotter_test.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/tests/python/qiskit/gates/givens_ansatz_test.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/tests/python/qiskit/gates/num_num_ansatz_test.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/tests/python/qiskit/gates/num_op_sum_test.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/tests/python/qiskit/gates/orbital_rotation_test.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/tests/python/qiskit/gates/slater_determinant_test.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/tests/python/qiskit/gates/ucj_test.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/tests/python/qiskit/jordan_wigner_test.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/tests/python/qiskit/sampler_test.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/tests/python/qiskit/sim_test.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/tests/python/qiskit/transpiler_passes/__init__.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/tests/python/qiskit/transpiler_passes/drop_negligible_test.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/tests/python/qiskit/transpiler_passes/merge_orbital_rotations_test.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/tests/python/qiskit/util_test.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/tests/python/random_test.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/tests/python/states/__init__.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/tests/python/states/bitstring_test.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/tests/python/states/rdm_test.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/tests/python/states/sample_slater_test.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/tests/python/states/states_test.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/tests/python/states/wick_test.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/tests/python/test_data/orbital_rotation-0.npy +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/tests/python/test_no_warnings.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/tests/python/testing_test.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/tests/python/trotter/__init__.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/tests/python/trotter/diag_coulomb_split_op_test.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/tests/python/trotter/double_factorized_test.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/tests/python/trotter/qdrift_test.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/tests/python/variational/__init__.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/tests/python/variational/givens_test.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/tests/python/variational/hopgate_test.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/tests/python/variational/multireference_test.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/tests/python/variational/num_num_test.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/tests/python/variational/orbital_optimization_test.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/tests/python/variational/uccsd_test.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/tests/python/variational/ucj_angles_spin_balanced_test.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/tests/python/variational/ucj_spin_balanced_test.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/tests/python/variational/ucj_spin_unbalanced_test.py +0 -0
- {ffsim-0.0.74 → ffsim-0.0.75}/tests/python/variational/ucj_spinless_test.py +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 72 72"><circle cx="36" cy="36" r="36" style="fill:#111"/><path d="M34.001 30.005c-.355 0-.508 0-.508-.254 0-.152.051-.305.102-.61 1.016-4.42 2.134-7.112 4.674-7.112.406 0 .812.102.812.407s-.254.254-.812.508c-.66.305-1.067 1.016-1.067 1.93 0 1.423 1.016 2.134 2.286 2.134 1.32 0 2.49-.864 2.49-2.743s-1.169-3.404-4.37-3.404c-4.927 0-7.67 3.505-9.347 8.382-.254.762-.305.762-1.016.762l-2.947.001c-.56 0-.813.254-.813.813q0 .762.762.762h2.946c.305 0 .407 0 .407.203 0 .102-.05.254-.102.508l-3.2 11.124c-1.423 4.98-2.337 6.605-4.37 6.605-.66 0-.914-.204-.914-.458 0-.406.458-.152 1.22-.66a2.22 2.22 0 0 0 1.016-1.88c0-1.32-.915-2.083-2.286-2.083-1.524 0-2.642 1.22-2.642 2.795 0 2.234 1.676 3.403 3.81 3.403 3.86 0 6.248-2.59 9.042-8.33 1.474-3.1 2.591-6.25 3.81-10.568l.051-.05c0-.153.407-.61.66-.61h7.198c.305 0 .407.001.407.204 0 .102-.05.254-.102.508l-3.2 11.124c-1.423 4.98-2.337 6.605-4.37 6.605-.66 0-.914-.204-.914-.458 0-.406.458-.152 1.22-.66a2.22 2.22 0 0 0 1.016-1.88c0-1.32-.915-2.083-2.286-2.083-1.524 0-2.642 1.22-2.642 2.795 0 2.234 1.676 3.403 3.81 3.403 3.86 0 6.248-2.59 9.042-8.33 1.474-3.1 2.591-6.25 3.81-10.568l.051-.05c0-.153.407-.61.66-.61h3.303c.558 0 .812-.254.812-.813q0-.762-.762-.762h-3.047c-.355 0-.508 0-.508-.254 0-.152.051-.305.102-.61 1.016-4.42 2.134-7.112 4.674-7.112.406 0 .812.102.812.407s-.254.254-.812.508c-.66.305-1.067 1.016-1.067 1.93 0 1.423 1.016 2.134 2.286 2.134 1.32 0 2.49-.864 2.49-2.743s-1.169-3.404-4.37-3.404c-4.927 0-7.67 3.505-9.347 8.382-.254.762-.305.762-1.016.762z" style="fill:#aaa"/></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 72 72"><circle cx="36" cy="36" r="36" style="fill:#fff"/><path d="M34.001 30.005c-.355 0-.508 0-.508-.254 0-.152.051-.305.102-.61 1.016-4.42 2.134-7.112 4.674-7.112.406 0 .812.102.812.407s-.254.254-.812.508c-.66.305-1.067 1.016-1.067 1.93 0 1.423 1.016 2.134 2.286 2.134 1.32 0 2.49-.864 2.49-2.743s-1.169-3.404-4.37-3.404c-4.927 0-7.67 3.505-9.347 8.382-.254.762-.305.762-1.016.762l-2.947.001c-.56 0-.813.254-.813.813q0 .762.762.762h2.946c.305 0 .407 0 .407.203 0 .102-.05.254-.102.508l-3.2 11.124c-1.423 4.98-2.337 6.605-4.37 6.605-.66 0-.914-.204-.914-.458 0-.406.458-.152 1.22-.66a2.22 2.22 0 0 0 1.016-1.88c0-1.32-.915-2.083-2.286-2.083-1.524 0-2.642 1.22-2.642 2.795 0 2.234 1.676 3.403 3.81 3.403 3.86 0 6.248-2.59 9.042-8.33 1.474-3.1 2.591-6.25 3.81-10.568l.051-.05c0-.153.407-.61.66-.61h7.198c.305 0 .407.001.407.204 0 .102-.05.254-.102.508l-3.2 11.124c-1.423 4.98-2.337 6.605-4.37 6.605-.66 0-.914-.204-.914-.458 0-.406.458-.152 1.22-.66a2.22 2.22 0 0 0 1.016-1.88c0-1.32-.915-2.083-2.286-2.083-1.524 0-2.642 1.22-2.642 2.795 0 2.234 1.676 3.403 3.81 3.403 3.86 0 6.248-2.59 9.042-8.33 1.474-3.1 2.591-6.25 3.81-10.568l.051-.05c0-.153.407-.61.66-.61h3.303c.558 0 .812-.254.812-.813q0-.762-.762-.762h-3.047c-.355 0-.508 0-.508-.254 0-.152.051-.305.102-.61 1.016-4.42 2.134-7.112 4.674-7.112.406 0 .812.102.812.407s-.254.254-.812.508c-.66.305-1.067 1.016-1.067 1.93 0 1.423 1.016 2.134 2.286 2.134 1.32 0 2.49-.864 2.49-2.743s-1.169-3.404-4.37-3.404c-4.927 0-7.67 3.505-9.347 8.382-.254.762-.305.762-1.016.762z" style="fill:#000"/></svg>
|
|
@@ -41,8 +41,14 @@ html_theme_options = {
|
|
|
41
41
|
"source_branch": "main",
|
|
42
42
|
"source_directory": "docs/",
|
|
43
43
|
"sidebar_qiskit_ecosystem_member": True,
|
|
44
|
+
"light_logo": "logo.svg",
|
|
45
|
+
"dark_logo": "logo-dark.svg",
|
|
44
46
|
}
|
|
45
47
|
|
|
48
|
+
# HTML static files
|
|
49
|
+
html_static_path = ["_static"]
|
|
50
|
+
html_favicon = "_static/logo.svg"
|
|
51
|
+
|
|
46
52
|
# autosummary options
|
|
47
53
|
autosummary_generate = True
|
|
48
54
|
templates_path = ["_templates"]
|
|
@@ -12,18 +12,23 @@
|
|
|
12
12
|
},
|
|
13
13
|
{
|
|
14
14
|
"cell_type": "code",
|
|
15
|
-
"execution_count":
|
|
15
|
+
"execution_count": 5,
|
|
16
16
|
"id": "8301b83e",
|
|
17
17
|
"metadata": {},
|
|
18
18
|
"outputs": [],
|
|
19
19
|
"source": [
|
|
20
|
+
"import warnings\n",
|
|
21
|
+
"\n",
|
|
20
22
|
"import pyscf\n",
|
|
21
23
|
"import pyscf.cc\n",
|
|
22
24
|
"from qiskit.circuit import QuantumCircuit, QuantumRegister\n",
|
|
23
25
|
"from qiskit.providers.fake_provider import GenericBackendV2\n",
|
|
24
|
-
"from qiskit.transpiler
|
|
26
|
+
"from qiskit.transpiler import CouplingMap\n",
|
|
27
|
+
"\n",
|
|
28
|
+
"import ffsim\n",
|
|
29
|
+
"from ffsim.qiskit import generate_lucj_pass_manager\n",
|
|
25
30
|
"\n",
|
|
26
|
-
"
|
|
31
|
+
"warnings.formatwarning = lambda msg, *args, **kwargs: f\"Warning: {msg}\\n\""
|
|
27
32
|
]
|
|
28
33
|
},
|
|
29
34
|
{
|
|
@@ -33,12 +38,12 @@
|
|
|
33
38
|
"source": [
|
|
34
39
|
"## LUCJ circuit for a closed-shell molecule\n",
|
|
35
40
|
"\n",
|
|
36
|
-
"For a closed-shell system, use the spin-balanced LUCJ ansatz. This example creates an LUCJ circuit for a nitrogen molecule in the 6-31g basis."
|
|
41
|
+
"For a closed-shell system, use the spin-balanced LUCJ ansatz. This example creates an LUCJ circuit for a nitrogen molecule in the 6-31g basis and transpiled it for generic backend with square connectivity."
|
|
37
42
|
]
|
|
38
43
|
},
|
|
39
44
|
{
|
|
40
45
|
"cell_type": "code",
|
|
41
|
-
"execution_count":
|
|
46
|
+
"execution_count": 6,
|
|
42
47
|
"id": "2a3c1abb",
|
|
43
48
|
"metadata": {},
|
|
44
49
|
"outputs": [
|
|
@@ -46,24 +51,38 @@
|
|
|
46
51
|
"name": "stdout",
|
|
47
52
|
"output_type": "stream",
|
|
48
53
|
"text": [
|
|
49
|
-
"converged SCF energy = -108.
|
|
54
|
+
"converged SCF energy = -108.835236570774\n",
|
|
50
55
|
"norb = 16\n",
|
|
51
56
|
"nelec = (5, 5)\n",
|
|
52
|
-
"E(CCSD) = -109.
|
|
57
|
+
"E(CCSD) = -109.0398256929733 E_corr = -0.20458912219883\n"
|
|
58
|
+
]
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
"name": "stderr",
|
|
62
|
+
"output_type": "stream",
|
|
63
|
+
"text": [
|
|
64
|
+
"Warning: Backend cannot accommodate pairs_ab=[(0, 0), (1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6), (7, 7), (8, 8), (9, 9), (10, 10), (11, 11), (12, 12), (13, 13), (14, 14), (15, 15)].\n",
|
|
65
|
+
"Removing interaction (15, 15) from the end.\n",
|
|
66
|
+
"Warning: Backend cannot accommodate pairs_ab=[(0, 0), (1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6), (7, 7), (8, 8), (9, 9), (10, 10), (11, 11), (12, 12), (13, 13), (14, 14)].\n",
|
|
67
|
+
"Removing interaction (14, 14) from the end.\n",
|
|
68
|
+
"Warning: Backend cannot accommodate pairs_ab=[(0, 0), (1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6), (7, 7), (8, 8), (9, 9), (10, 10), (11, 11), (12, 12), (13, 13)].\n",
|
|
69
|
+
"Removing interaction (13, 13) from the end.\n",
|
|
70
|
+
"Warning: Backend cannot accommodate pairs_ab=[(0, 0), (1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6), (7, 7), (8, 8), (9, 9), (10, 10), (11, 11), (12, 12)].\n",
|
|
71
|
+
"Removing interaction (12, 12) from the end.\n"
|
|
53
72
|
]
|
|
54
73
|
},
|
|
55
74
|
{
|
|
56
75
|
"data": {
|
|
57
76
|
"text/plain": [
|
|
58
77
|
"OrderedDict([('xx_plus_yy', 590),\n",
|
|
59
|
-
" ('cp',
|
|
78
|
+
" ('cp', 84),\n",
|
|
60
79
|
" ('p', 64),\n",
|
|
61
80
|
" ('measure', 32),\n",
|
|
62
81
|
" ('x', 10),\n",
|
|
63
82
|
" ('barrier', 1)])"
|
|
64
83
|
]
|
|
65
84
|
},
|
|
66
|
-
"execution_count":
|
|
85
|
+
"execution_count": 6,
|
|
67
86
|
"metadata": {},
|
|
68
87
|
"output_type": "execute_result"
|
|
69
88
|
}
|
|
@@ -96,10 +115,33 @@
|
|
|
96
115
|
"\n",
|
|
97
116
|
"# Use 2 ansatz layers\n",
|
|
98
117
|
"n_reps = 2\n",
|
|
99
|
-
"#
|
|
118
|
+
"# Define interactions\n",
|
|
100
119
|
"pairs_aa = [(p, p + 1) for p in range(norb - 1)]\n",
|
|
101
|
-
"pairs_ab =
|
|
120
|
+
"pairs_ab = (\n",
|
|
121
|
+
" None # Use generate_lucj_pass_manager() to find alpha-beta interactions later\n",
|
|
122
|
+
")\n",
|
|
123
|
+
"\n",
|
|
124
|
+
"# Create a generic backend with square connectivity\n",
|
|
125
|
+
"cmap_square = CouplingMap.from_grid(num_rows=12, num_columns=10)\n",
|
|
126
|
+
"backend = GenericBackendV2(\n",
|
|
127
|
+
" num_qubits=cmap_square.size(),\n",
|
|
128
|
+
" basis_gates=[\"cp\", \"xx_plus_yy\", \"p\", \"x\", \"swap\"],\n",
|
|
129
|
+
" coupling_map=cmap_square,\n",
|
|
130
|
+
")\n",
|
|
131
|
+
"\n",
|
|
132
|
+
"# Generate a LUCJ-specific configured Qiskit preset pass manager\n",
|
|
133
|
+
"# and get pairs_ab, implementable on a square coupling map.\n",
|
|
134
|
+
"# The pass manager is confifgured with pre-init passes suggested by\n",
|
|
135
|
+
"# ffsim (ffsim.qiskit.PRE_INIT) and an error-aware LUCJ-friendly layout\n",
|
|
136
|
+
"pass_manager, pairs_ab = generate_lucj_pass_manager(\n",
|
|
137
|
+
" backend=backend,\n",
|
|
138
|
+
" norb=norb,\n",
|
|
139
|
+
" connectivity=\"square\",\n",
|
|
140
|
+
" interaction_pairs=(pairs_aa, pairs_ab),\n",
|
|
141
|
+
" optimization_level=3,\n",
|
|
142
|
+
")\n",
|
|
102
143
|
"\n",
|
|
144
|
+
"# Use the backend implementable pairs_ab to construct the ucj_op\n",
|
|
103
145
|
"ucj_op = ffsim.UCJOpSpinBalanced.from_t_amplitudes(\n",
|
|
104
146
|
" ccsd.t2,\n",
|
|
105
147
|
" t1=ccsd.t1,\n",
|
|
@@ -120,16 +162,22 @@
|
|
|
120
162
|
"circuit.append(ffsim.qiskit.UCJOpSpinBalancedJW(ucj_op), qubits)\n",
|
|
121
163
|
"circuit.measure_all()\n",
|
|
122
164
|
"\n",
|
|
123
|
-
"#
|
|
124
|
-
"backend = GenericBackendV2(2 * norb, basis_gates=[\"cp\", \"xx_plus_yy\", \"p\", \"x\"])\n",
|
|
125
|
-
"pass_manager = generate_preset_pass_manager(optimization_level=3, backend=backend)\n",
|
|
126
|
-
"# Set the pre-initialization stage of the pass manager with passes suggested by ffsim\n",
|
|
127
|
-
"pass_manager.pre_init = ffsim.qiskit.PRE_INIT\n",
|
|
165
|
+
"# Transpile the circuit with configured pass manager\n",
|
|
128
166
|
"transpiled = pass_manager.run(circuit)\n",
|
|
129
167
|
"\n",
|
|
130
168
|
"transpiled.count_ops()"
|
|
131
169
|
]
|
|
132
170
|
},
|
|
171
|
+
{
|
|
172
|
+
"cell_type": "markdown",
|
|
173
|
+
"id": "371b82fb",
|
|
174
|
+
"metadata": {},
|
|
175
|
+
"source": [
|
|
176
|
+
"As we initially set `pairs_ab=None`, the `generate_lucj_pass_manager()` starts with a default one. For square lattice, it is `[(0, 0), (1, 1), (2, 2), ..., (norb-1, norb-1)]`. However, if the hardware connectivity does not accommodate all starting pairs, then pairs are dropped from the end of the list until a valid layout is found, and a warning is raised. In the example above, last four pairs, from `(15, 15)` to `(12, 12)`, are dropped with a warning message showing the dropped pairs.\n",
|
|
177
|
+
"\n",
|
|
178
|
+
"Note that you can use a different `pairs_ab` during the `ucj_op` construction instead of the one returned by `generate_lucj_pass_manager`, but doing so may incur a higher SWAP overhead."
|
|
179
|
+
]
|
|
180
|
+
},
|
|
133
181
|
{
|
|
134
182
|
"cell_type": "markdown",
|
|
135
183
|
"id": "42f81ad1",
|
|
@@ -142,7 +190,7 @@
|
|
|
142
190
|
},
|
|
143
191
|
{
|
|
144
192
|
"cell_type": "code",
|
|
145
|
-
"execution_count":
|
|
193
|
+
"execution_count": 7,
|
|
146
194
|
"id": "9cbafb1d",
|
|
147
195
|
"metadata": {},
|
|
148
196
|
"outputs": [
|
|
@@ -151,27 +199,27 @@
|
|
|
151
199
|
"output_type": "stream",
|
|
152
200
|
"text": [
|
|
153
201
|
"SCF not converged.\n",
|
|
154
|
-
"SCF energy = -75.
|
|
202
|
+
"SCF energy = -75.3484557085522\n",
|
|
155
203
|
"norb = 11\n",
|
|
156
204
|
"nelec = (5, 4)\n",
|
|
157
205
|
"\n",
|
|
158
206
|
"WARN: RCCSD method does not support ROHF method. ROHF object is converted to UHF object and UCCSD method is called.\n",
|
|
159
207
|
"\n",
|
|
160
|
-
"E(UCCSD) = -75.
|
|
208
|
+
"E(UCCSD) = -75.45619739099324 E_corr = -0.1077416824410066\n"
|
|
161
209
|
]
|
|
162
210
|
},
|
|
163
211
|
{
|
|
164
212
|
"data": {
|
|
165
213
|
"text/plain": [
|
|
166
|
-
"OrderedDict([('xx_plus_yy',
|
|
214
|
+
"OrderedDict([('xx_plus_yy', 715),\n",
|
|
215
|
+
" ('cp', 136),\n",
|
|
167
216
|
" ('p', 132),\n",
|
|
168
|
-
" ('cp', 128),\n",
|
|
169
217
|
" ('measure', 22),\n",
|
|
170
218
|
" ('x', 9),\n",
|
|
171
219
|
" ('barrier', 1)])"
|
|
172
220
|
]
|
|
173
221
|
},
|
|
174
|
-
"execution_count":
|
|
222
|
+
"execution_count": 7,
|
|
175
223
|
"metadata": {},
|
|
176
224
|
"output_type": "execute_result"
|
|
177
225
|
}
|
|
@@ -201,8 +249,19 @@
|
|
|
201
249
|
"n_reps = (4, 2)\n",
|
|
202
250
|
"# Use interactions implementable on a square lattice\n",
|
|
203
251
|
"pairs_aa = [(p, p + 1) for p in range(norb - 1)]\n",
|
|
204
|
-
"pairs_ab = [(p, p) for p in range(norb)]\n",
|
|
205
|
-
"pairs_bb = [(p, p + 1) for p in range(norb - 1)]\n",
|
|
252
|
+
"pairs_ab = [(p, p) for p in range(norb)] # Update it later; can be ``None`` also\n",
|
|
253
|
+
"pairs_bb = [(p, p + 1) for p in range(norb - 1)] # Can be ``None`` as well\n",
|
|
254
|
+
"\n",
|
|
255
|
+
"# Generate the configured preset pass manager and implementable pairs_ab\n",
|
|
256
|
+
"pass_manager, pairs_ab = generate_lucj_pass_manager(\n",
|
|
257
|
+
" backend=backend,\n",
|
|
258
|
+
" norb=norb,\n",
|
|
259
|
+
" connectivity=\"square\",\n",
|
|
260
|
+
" interaction_pairs=(pairs_aa, pairs_ab, pairs_bb),\n",
|
|
261
|
+
" optimization_level=3,\n",
|
|
262
|
+
")\n",
|
|
263
|
+
"\n",
|
|
264
|
+
"# Use the backend implementable pairs_ab to construct the ucj_op\n",
|
|
206
265
|
"ucj_op = ffsim.UCJOpSpinUnbalanced.from_t_amplitudes(\n",
|
|
207
266
|
" ccsd.t2,\n",
|
|
208
267
|
" t1=ccsd.t1,\n",
|
|
@@ -223,20 +282,24 @@
|
|
|
223
282
|
"circuit.append(ffsim.qiskit.UCJOpSpinUnbalancedJW(ucj_op), qubits)\n",
|
|
224
283
|
"circuit.measure_all()\n",
|
|
225
284
|
"\n",
|
|
226
|
-
"#
|
|
227
|
-
"backend = GenericBackendV2(2 * norb, basis_gates=[\"cp\", \"xx_plus_yy\", \"p\", \"x\"])\n",
|
|
228
|
-
"pass_manager = generate_preset_pass_manager(optimization_level=3, backend=backend)\n",
|
|
229
|
-
"# Set the pre-initialization stage of the pass manager with passes suggested by ffsim\n",
|
|
230
|
-
"pass_manager.pre_init = ffsim.qiskit.PRE_INIT\n",
|
|
285
|
+
"# Transpile the circuit with configured pass manager\n",
|
|
231
286
|
"transpiled = pass_manager.run(circuit)\n",
|
|
232
287
|
"\n",
|
|
233
288
|
"transpiled.count_ops()"
|
|
234
289
|
]
|
|
290
|
+
},
|
|
291
|
+
{
|
|
292
|
+
"cell_type": "markdown",
|
|
293
|
+
"id": "93963ffd",
|
|
294
|
+
"metadata": {},
|
|
295
|
+
"source": [
|
|
296
|
+
"As `norb=11` in this example, `pairs_ab = [(0, 0), ..., (10, 10)]`, which the backend can accommodate. Therefore, this example does not raise warnings about dropped pairs."
|
|
297
|
+
]
|
|
235
298
|
}
|
|
236
299
|
],
|
|
237
300
|
"metadata": {
|
|
238
301
|
"kernelspec": {
|
|
239
|
-
"display_name": "
|
|
302
|
+
"display_name": "ffsim",
|
|
240
303
|
"language": "python",
|
|
241
304
|
"name": "python3"
|
|
242
305
|
},
|
|
@@ -35,7 +35,11 @@ from ffsim.qiskit.gates import (
|
|
|
35
35
|
from ffsim.qiskit.jordan_wigner import jordan_wigner
|
|
36
36
|
from ffsim.qiskit.sampler import FfsimSampler
|
|
37
37
|
from ffsim.qiskit.sim import final_state_vector
|
|
38
|
-
from ffsim.qiskit.transpiler_passes import
|
|
38
|
+
from ffsim.qiskit.transpiler_passes import (
|
|
39
|
+
DropNegligible,
|
|
40
|
+
MergeOrbitalRotations,
|
|
41
|
+
generate_lucj_pass_manager,
|
|
42
|
+
)
|
|
39
43
|
from ffsim.qiskit.transpiler_stages import pre_init_passes
|
|
40
44
|
from ffsim.qiskit.util import ffsim_vec_to_qiskit_vec, qiskit_vec_to_ffsim_vec
|
|
41
45
|
|
|
@@ -45,8 +49,6 @@ PRE_INIT = PassManager(list(pre_init_passes()))
|
|
|
45
49
|
See :func:`pre_init_passes` for a description of the transpiler passes included in this
|
|
46
50
|
pass manager.
|
|
47
51
|
"""
|
|
48
|
-
|
|
49
|
-
|
|
50
52
|
__all__ = [
|
|
51
53
|
"PRE_INIT",
|
|
52
54
|
"DiagCoulombEvolutionJW",
|
|
@@ -72,6 +74,7 @@ __all__ = [
|
|
|
72
74
|
"UCJOpSpinlessJW",
|
|
73
75
|
"ffsim_vec_to_qiskit_vec",
|
|
74
76
|
"final_state_vector",
|
|
77
|
+
"generate_lucj_pass_manager",
|
|
75
78
|
"jordan_wigner",
|
|
76
79
|
"pre_init_passes",
|
|
77
80
|
"qiskit_vec_to_ffsim_vec",
|
|
@@ -11,9 +11,13 @@
|
|
|
11
11
|
"""Qiskit transpiler passes for fermionic quantum circuits."""
|
|
12
12
|
|
|
13
13
|
from ffsim.qiskit.transpiler_passes.drop_negligible import DropNegligible
|
|
14
|
+
from ffsim.qiskit.transpiler_passes.lucj_preset_pass_manager import (
|
|
15
|
+
generate_lucj_pass_manager,
|
|
16
|
+
)
|
|
14
17
|
from ffsim.qiskit.transpiler_passes.merge_orbital_rotations import MergeOrbitalRotations
|
|
15
18
|
|
|
16
19
|
__all__ = [
|
|
17
20
|
"DropNegligible",
|
|
18
21
|
"MergeOrbitalRotations",
|
|
22
|
+
"generate_lucj_pass_manager",
|
|
19
23
|
]
|