ffsim 0.0.75__tar.gz → 0.0.76__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.
Files changed (256) hide show
  1. {ffsim-0.0.75 → ffsim-0.0.76}/.github/workflows/build-and-release.yml +0 -2
  2. {ffsim-0.0.75 → ffsim-0.0.76}/.github/workflows/check.yml +1 -1
  3. {ffsim-0.0.75 → ffsim-0.0.76}/.github/workflows/docs-dev.yml +1 -1
  4. {ffsim-0.0.75 → ffsim-0.0.76}/.github/workflows/docs-release.yml +1 -1
  5. {ffsim-0.0.75 → ffsim-0.0.76}/.github/workflows/test-latest-versions.yml +0 -6
  6. {ffsim-0.0.75 → ffsim-0.0.76}/.github/workflows/test-minimum-versions.yml +0 -3
  7. ffsim-0.0.76/Cargo.lock +319 -0
  8. {ffsim-0.0.75 → ffsim-0.0.76}/Cargo.toml +0 -6
  9. {ffsim-0.0.75 → ffsim-0.0.76}/PKG-INFO +17 -5
  10. {ffsim-0.0.75 → ffsim-0.0.76}/README.md +16 -4
  11. {ffsim-0.0.75 → ffsim-0.0.76}/docs/explanations/variational-ansatzes.ipynb +1 -1
  12. {ffsim-0.0.75 → ffsim-0.0.76}/docs/index.md +14 -0
  13. ffsim-0.0.76/docs/install.md +43 -0
  14. {ffsim-0.0.75 → ffsim-0.0.76}/docs/tutorials/double-factorized-trotter.ipynb +1 -1
  15. {ffsim-0.0.75 → ffsim-0.0.76}/pyproject.toml +2 -2
  16. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/_lib.pyi +2 -2
  17. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/linalg/givens.py +3 -2
  18. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/operators/coupled_cluster.py +12 -12
  19. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/qiskit/__init__.py +2 -5
  20. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/qiskit/transpiler_passes/__init__.py +0 -3
  21. {ffsim-0.0.75 → ffsim-0.0.76}/src/gates/phase_shift.rs +2 -14
  22. {ffsim-0.0.75 → ffsim-0.0.76}/src/jordan_wigner.rs +1 -0
  23. {ffsim-0.0.75 → ffsim-0.0.76}/src/linalg/givens.rs +7 -8
  24. {ffsim-0.0.75 → ffsim-0.0.76}/uv.lock +1407 -1066
  25. ffsim-0.0.75/Cargo.lock +0 -1067
  26. ffsim-0.0.75/docs/install.md +0 -65
  27. {ffsim-0.0.75 → ffsim-0.0.76}/.dockerignore +0 -0
  28. {ffsim-0.0.75 → ffsim-0.0.76}/.github/workflows/docker.yml +0 -0
  29. {ffsim-0.0.75 → ffsim-0.0.76}/.gitignore +0 -0
  30. {ffsim-0.0.75 → ffsim-0.0.76}/.pre-commit-config.yaml +0 -0
  31. {ffsim-0.0.75 → ffsim-0.0.76}/CONTRIBUTING.md +0 -0
  32. {ffsim-0.0.75 → ffsim-0.0.76}/Dockerfile +0 -0
  33. {ffsim-0.0.75 → ffsim-0.0.76}/LICENSE +0 -0
  34. {ffsim-0.0.75 → ffsim-0.0.76}/compose.yaml +0 -0
  35. {ffsim-0.0.75 → ffsim-0.0.76}/docs/_static/logo-dark.svg +0 -0
  36. {ffsim-0.0.75 → ffsim-0.0.76}/docs/_static/logo.svg +0 -0
  37. {ffsim-0.0.75 → ffsim-0.0.76}/docs/_templates/autosummary/class.rst +0 -0
  38. {ffsim-0.0.75 → ffsim-0.0.76}/docs/conf.py +0 -0
  39. {ffsim-0.0.75 → ffsim-0.0.76}/docs/explanations/diag-coulomb-hamiltonian.ipynb +0 -0
  40. {ffsim-0.0.75 → ffsim-0.0.76}/docs/explanations/double-factorized.ipynb +0 -0
  41. {ffsim-0.0.75 → ffsim-0.0.76}/docs/explanations/fermion-operator.ipynb +0 -0
  42. {ffsim-0.0.75 → ffsim-0.0.76}/docs/explanations/hamiltonians.ipynb +0 -0
  43. {ffsim-0.0.75 → ffsim-0.0.76}/docs/explanations/index.md +0 -0
  44. {ffsim-0.0.75 → ffsim-0.0.76}/docs/explanations/lucj.ipynb +0 -0
  45. {ffsim-0.0.75 → ffsim-0.0.76}/docs/explanations/orbital-rotation.ipynb +0 -0
  46. {ffsim-0.0.75 → ffsim-0.0.76}/docs/explanations/protocols.ipynb +0 -0
  47. {ffsim-0.0.75 → ffsim-0.0.76}/docs/explanations/qubit-gate-decompositions.ipynb +0 -0
  48. {ffsim-0.0.75 → ffsim-0.0.76}/docs/explanations/state-vectors-and-gates.ipynb +0 -0
  49. {ffsim-0.0.75 → ffsim-0.0.76}/docs/generate_api_docs.py +0 -0
  50. {ffsim-0.0.75 → ffsim-0.0.76}/docs/how-to-guides/compute-expectation-values.ipynb +0 -0
  51. {ffsim-0.0.75 → ffsim-0.0.76}/docs/how-to-guides/entanglement-forging.ipynb +0 -0
  52. {ffsim-0.0.75 → ffsim-0.0.76}/docs/how-to-guides/index.md +0 -0
  53. {ffsim-0.0.75 → ffsim-0.0.76}/docs/how-to-guides/qiskit-circuits-sim.ipynb +0 -0
  54. {ffsim-0.0.75 → ffsim-0.0.76}/docs/how-to-guides/qiskit-lucj.ipynb +0 -0
  55. {ffsim-0.0.75 → ffsim-0.0.76}/docs/how-to-guides/qiskit-merge-orbital-rotations.ipynb +0 -0
  56. {ffsim-0.0.75 → ffsim-0.0.76}/docs/how-to-guides/qiskit-trotter.ipynb +0 -0
  57. {ffsim-0.0.75 → ffsim-0.0.76}/docs/how-to-guides/sample-from-state-vectors.ipynb +0 -0
  58. {ffsim-0.0.75 → ffsim-0.0.76}/docs/how-to-guides/sample-slater.ipynb +0 -0
  59. {ffsim-0.0.75 → ffsim-0.0.76}/docs/how-to-guides/simulate-trotter-hubbard.ipynb +0 -0
  60. {ffsim-0.0.75 → ffsim-0.0.76}/docs/how-to-guides/simulate-trotter-mol-ham.ipynb +0 -0
  61. {ffsim-0.0.75 → ffsim-0.0.76}/docs/how-to-guides/simulate-vqe.ipynb +0 -0
  62. {ffsim-0.0.75 → ffsim-0.0.76}/docs/tutorials/index.md +0 -0
  63. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/__init__.py +0 -0
  64. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/_cistring.py +0 -0
  65. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/_slow/__init__.py +0 -0
  66. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/_slow/contract/__init__.py +0 -0
  67. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/_slow/contract/diag_coulomb.py +0 -0
  68. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/_slow/contract/num_op_sum.py +0 -0
  69. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/_slow/fermion_operator.py +0 -0
  70. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/_slow/gates/__init__.py +0 -0
  71. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/_slow/gates/diag_coulomb.py +0 -0
  72. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/_slow/gates/num_op_sum.py +0 -0
  73. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/_slow/gates/orbital_rotation.py +0 -0
  74. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/contract/__init__.py +0 -0
  75. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/contract/diag_coulomb.py +0 -0
  76. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/contract/num_op_sum.py +0 -0
  77. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/contract/one_body.py +0 -0
  78. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/contract/two_body.py +0 -0
  79. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/gates/__init__.py +0 -0
  80. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/gates/basic_gates.py +0 -0
  81. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/gates/diag_coulomb.py +0 -0
  82. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/gates/num_op_sum.py +0 -0
  83. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/gates/orbital_rotation.py +0 -0
  84. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/gates/quad_ham.py +0 -0
  85. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/hamiltonians/__init__.py +0 -0
  86. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/hamiltonians/diagonal_coulomb_hamiltonian.py +0 -0
  87. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/hamiltonians/double_factorized_hamiltonian.py +0 -0
  88. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/hamiltonians/molecular_hamiltonian.py +0 -0
  89. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/hamiltonians/single_factorized_hamiltonian.py +0 -0
  90. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/init_cache.py +0 -0
  91. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/linalg/__init__.py +0 -0
  92. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/linalg/double_factorized_decomposition.py +0 -0
  93. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/linalg/linalg.py +0 -0
  94. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/linalg/predicates.py +0 -0
  95. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/linalg/util.py +0 -0
  96. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/molecular_data.py +0 -0
  97. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/operators/__init__.py +0 -0
  98. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/operators/common_operators.py +0 -0
  99. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/operators/fermi_hubbard.py +0 -0
  100. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/operators/fermion_action.py +0 -0
  101. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/operators/fermion_operator.py +0 -0
  102. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/optimize/__init__.py +0 -0
  103. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/optimize/_util.py +0 -0
  104. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/optimize/linear_method.py +0 -0
  105. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/protocols/__init__.py +0 -0
  106. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/protocols/apply_unitary_protocol.py +0 -0
  107. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/protocols/approximate_equality_protocol.py +0 -0
  108. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/protocols/diagonal_protocol.py +0 -0
  109. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/protocols/fermion_operator_protocol.py +0 -0
  110. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/protocols/linear_operator_protocol.py +0 -0
  111. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/protocols/trace_protocol.py +0 -0
  112. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/py.typed +0 -0
  113. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/qiskit/gates/__init__.py +0 -0
  114. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/qiskit/gates/diag_coulomb.py +0 -0
  115. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/qiskit/gates/diag_coulomb_trotter_split_op.py +0 -0
  116. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/qiskit/gates/double_factorized_trotter.py +0 -0
  117. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/qiskit/gates/givens_ansatz.py +0 -0
  118. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/qiskit/gates/num_num_ansatz.py +0 -0
  119. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/qiskit/gates/num_op_sum.py +0 -0
  120. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/qiskit/gates/orbital_rotation.py +0 -0
  121. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/qiskit/gates/slater_determinant.py +0 -0
  122. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/qiskit/gates/ucj.py +0 -0
  123. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/qiskit/jordan_wigner.py +0 -0
  124. /ffsim-0.0.75/python/ffsim/qiskit/transpiler_passes/lucj_preset_pass_manager.py → /ffsim-0.0.76/python/ffsim/qiskit/lucj_pass_manager.py +0 -0
  125. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/qiskit/sampler.py +0 -0
  126. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/qiskit/sim.py +0 -0
  127. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/qiskit/transpiler_passes/drop_negligible.py +0 -0
  128. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/qiskit/transpiler_passes/merge_orbital_rotations.py +0 -0
  129. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/qiskit/transpiler_stages.py +0 -0
  130. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/qiskit/util.py +0 -0
  131. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/random/__init__.py +0 -0
  132. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/random/random.py +0 -0
  133. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/states/__init__.py +0 -0
  134. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/states/bitstring.py +0 -0
  135. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/states/dimensions.py +0 -0
  136. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/states/product_state_sum.py +0 -0
  137. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/states/rdm.py +0 -0
  138. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/states/sample_slater.py +0 -0
  139. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/states/slater.py +0 -0
  140. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/states/spin.py +0 -0
  141. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/states/states.py +0 -0
  142. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/states/wick.py +0 -0
  143. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/testing/__init__.py +0 -0
  144. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/testing/testing.py +0 -0
  145. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/trotter/__init__.py +0 -0
  146. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/trotter/_util.py +0 -0
  147. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/trotter/diagonal_coulomb_split_op.py +0 -0
  148. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/trotter/double_factorized.py +0 -0
  149. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/trotter/qdrift.py +0 -0
  150. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/variational/__init__.py +0 -0
  151. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/variational/givens.py +0 -0
  152. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/variational/hopgate.py +0 -0
  153. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/variational/multireference.py +0 -0
  154. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/variational/num_num.py +0 -0
  155. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/variational/orbital_optimization.py +0 -0
  156. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/variational/uccsd.py +0 -0
  157. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/variational/ucj_angles_spin_balanced.py +0 -0
  158. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/variational/ucj_spin_balanced.py +0 -0
  159. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/variational/ucj_spin_unbalanced.py +0 -0
  160. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/variational/ucj_spinless.py +0 -0
  161. {ffsim-0.0.75 → ffsim-0.0.76}/python/ffsim/variational/util.py +0 -0
  162. {ffsim-0.0.75 → ffsim-0.0.76}/src/contract/diag_coulomb.rs +0 -0
  163. {ffsim-0.0.75 → ffsim-0.0.76}/src/contract/mod.rs +0 -0
  164. {ffsim-0.0.75 → ffsim-0.0.76}/src/contract/num_op_sum.rs +0 -0
  165. {ffsim-0.0.75 → ffsim-0.0.76}/src/fermion_operator.rs +0 -0
  166. {ffsim-0.0.75 → ffsim-0.0.76}/src/gates/diag_coulomb.rs +0 -0
  167. {ffsim-0.0.75 → ffsim-0.0.76}/src/gates/mod.rs +0 -0
  168. {ffsim-0.0.75 → ffsim-0.0.76}/src/gates/num_op_sum.rs +0 -0
  169. {ffsim-0.0.75 → ffsim-0.0.76}/src/gates/orbital_rotation.rs +0 -0
  170. {ffsim-0.0.75 → ffsim-0.0.76}/src/lib.rs +0 -0
  171. {ffsim-0.0.75 → ffsim-0.0.76}/src/linalg/mod.rs +0 -0
  172. {ffsim-0.0.75 → ffsim-0.0.76}/tests/python/__init__.py +0 -0
  173. {ffsim-0.0.75 → ffsim-0.0.76}/tests/python/_slow/__init__.py +0 -0
  174. {ffsim-0.0.75 → ffsim-0.0.76}/tests/python/_slow/contract/__init__.py +0 -0
  175. {ffsim-0.0.75 → ffsim-0.0.76}/tests/python/_slow/contract/diag_coulomb_test.py +0 -0
  176. {ffsim-0.0.75 → ffsim-0.0.76}/tests/python/_slow/contract/num_op_sum_test.py +0 -0
  177. {ffsim-0.0.75 → ffsim-0.0.76}/tests/python/_slow/gates/__init__.py +0 -0
  178. {ffsim-0.0.75 → ffsim-0.0.76}/tests/python/_slow/gates/diag_coulomb_test.py +0 -0
  179. {ffsim-0.0.75 → ffsim-0.0.76}/tests/python/_slow/gates/num_op_sum_test.py +0 -0
  180. {ffsim-0.0.75 → ffsim-0.0.76}/tests/python/_slow/gates/orbital_rotation_test.py +0 -0
  181. {ffsim-0.0.75 → ffsim-0.0.76}/tests/python/contract/__init__.py +0 -0
  182. {ffsim-0.0.75 → ffsim-0.0.76}/tests/python/contract/diag_coulomb_test.py +0 -0
  183. {ffsim-0.0.75 → ffsim-0.0.76}/tests/python/contract/num_op_sum_test.py +0 -0
  184. {ffsim-0.0.75 → ffsim-0.0.76}/tests/python/contract/two_body_test.py +0 -0
  185. {ffsim-0.0.75 → ffsim-0.0.76}/tests/python/gates/__init__.py +0 -0
  186. {ffsim-0.0.75 → ffsim-0.0.76}/tests/python/gates/basic_gates_test.py +0 -0
  187. {ffsim-0.0.75 → ffsim-0.0.76}/tests/python/gates/diag_coulomb_test.py +0 -0
  188. {ffsim-0.0.75 → ffsim-0.0.76}/tests/python/gates/num_op_sum_test.py +0 -0
  189. {ffsim-0.0.75 → ffsim-0.0.76}/tests/python/gates/orbital_rotation_test.py +0 -0
  190. {ffsim-0.0.75 → ffsim-0.0.76}/tests/python/gates/quad_ham_test.py +0 -0
  191. {ffsim-0.0.75 → ffsim-0.0.76}/tests/python/hamiltonians/__init__.py +0 -0
  192. {ffsim-0.0.75 → ffsim-0.0.76}/tests/python/hamiltonians/diagonal_coulomb_hamiltonian_test.py +0 -0
  193. {ffsim-0.0.75 → ffsim-0.0.76}/tests/python/hamiltonians/double_factorized_hamiltonian_test.py +0 -0
  194. {ffsim-0.0.75 → ffsim-0.0.76}/tests/python/hamiltonians/molecular_hamiltonian_test.py +0 -0
  195. {ffsim-0.0.75 → ffsim-0.0.76}/tests/python/hamiltonians/single_factorized_hamiltonian_test.py +0 -0
  196. {ffsim-0.0.75 → ffsim-0.0.76}/tests/python/linalg/__init__.py +0 -0
  197. {ffsim-0.0.75 → ffsim-0.0.76}/tests/python/linalg/double_factorized_decomposition_test.py +0 -0
  198. {ffsim-0.0.75 → ffsim-0.0.76}/tests/python/linalg/givens_test.py +0 -0
  199. {ffsim-0.0.75 → ffsim-0.0.76}/tests/python/linalg/linalg_test.py +0 -0
  200. {ffsim-0.0.75 → ffsim-0.0.76}/tests/python/linalg/util_test.py +0 -0
  201. {ffsim-0.0.75 → ffsim-0.0.76}/tests/python/molecular_data_test.py +0 -0
  202. {ffsim-0.0.75 → ffsim-0.0.76}/tests/python/operators/__init__.py +0 -0
  203. {ffsim-0.0.75 → ffsim-0.0.76}/tests/python/operators/common_operators_test.py +0 -0
  204. {ffsim-0.0.75 → ffsim-0.0.76}/tests/python/operators/coupled_cluster_test.py +0 -0
  205. {ffsim-0.0.75 → ffsim-0.0.76}/tests/python/operators/fermi_hubbard_test.py +0 -0
  206. {ffsim-0.0.75 → ffsim-0.0.76}/tests/python/operators/fermion_action_test.py +0 -0
  207. {ffsim-0.0.75 → ffsim-0.0.76}/tests/python/operators/fermion_operator_test.py +0 -0
  208. {ffsim-0.0.75 → ffsim-0.0.76}/tests/python/optimize/__init__.py +0 -0
  209. {ffsim-0.0.75 → ffsim-0.0.76}/tests/python/optimize/linear_method_test.py +0 -0
  210. {ffsim-0.0.75 → ffsim-0.0.76}/tests/python/protocols/__init__.py +0 -0
  211. {ffsim-0.0.75 → ffsim-0.0.76}/tests/python/protocols/trace_protocol_test.py +0 -0
  212. {ffsim-0.0.75 → ffsim-0.0.76}/tests/python/qiskit/__init__.py +0 -0
  213. {ffsim-0.0.75 → ffsim-0.0.76}/tests/python/qiskit/gates/__init__.py +0 -0
  214. {ffsim-0.0.75 → ffsim-0.0.76}/tests/python/qiskit/gates/diag_coulomb_test.py +0 -0
  215. {ffsim-0.0.75 → ffsim-0.0.76}/tests/python/qiskit/gates/diag_coulomb_trotter_split_op_test.py +0 -0
  216. {ffsim-0.0.75 → ffsim-0.0.76}/tests/python/qiskit/gates/double_factorized_trotter_test.py +0 -0
  217. {ffsim-0.0.75 → ffsim-0.0.76}/tests/python/qiskit/gates/givens_ansatz_test.py +0 -0
  218. {ffsim-0.0.75 → ffsim-0.0.76}/tests/python/qiskit/gates/num_num_ansatz_test.py +0 -0
  219. {ffsim-0.0.75 → ffsim-0.0.76}/tests/python/qiskit/gates/num_op_sum_test.py +0 -0
  220. {ffsim-0.0.75 → ffsim-0.0.76}/tests/python/qiskit/gates/orbital_rotation_test.py +0 -0
  221. {ffsim-0.0.75 → ffsim-0.0.76}/tests/python/qiskit/gates/slater_determinant_test.py +0 -0
  222. {ffsim-0.0.75 → ffsim-0.0.76}/tests/python/qiskit/gates/ucj_test.py +0 -0
  223. {ffsim-0.0.75 → ffsim-0.0.76}/tests/python/qiskit/jordan_wigner_test.py +0 -0
  224. /ffsim-0.0.75/tests/python/qiskit/transpiler_passes/lucj_preset_pass_manager_test.py → /ffsim-0.0.76/tests/python/qiskit/lucj_pass_manager_test.py +0 -0
  225. {ffsim-0.0.75 → ffsim-0.0.76}/tests/python/qiskit/sampler_test.py +0 -0
  226. {ffsim-0.0.75 → ffsim-0.0.76}/tests/python/qiskit/sim_test.py +0 -0
  227. {ffsim-0.0.75 → ffsim-0.0.76}/tests/python/qiskit/transpiler_passes/__init__.py +0 -0
  228. {ffsim-0.0.75 → ffsim-0.0.76}/tests/python/qiskit/transpiler_passes/drop_negligible_test.py +0 -0
  229. {ffsim-0.0.75 → ffsim-0.0.76}/tests/python/qiskit/transpiler_passes/merge_orbital_rotations_test.py +0 -0
  230. {ffsim-0.0.75 → ffsim-0.0.76}/tests/python/qiskit/util_test.py +0 -0
  231. {ffsim-0.0.75 → ffsim-0.0.76}/tests/python/random_test.py +0 -0
  232. {ffsim-0.0.75 → ffsim-0.0.76}/tests/python/states/__init__.py +0 -0
  233. {ffsim-0.0.75 → ffsim-0.0.76}/tests/python/states/bitstring_test.py +0 -0
  234. {ffsim-0.0.75 → ffsim-0.0.76}/tests/python/states/rdm_test.py +0 -0
  235. {ffsim-0.0.75 → ffsim-0.0.76}/tests/python/states/sample_slater_test.py +0 -0
  236. {ffsim-0.0.75 → ffsim-0.0.76}/tests/python/states/slater_test.py +0 -0
  237. {ffsim-0.0.75 → ffsim-0.0.76}/tests/python/states/states_test.py +0 -0
  238. {ffsim-0.0.75 → ffsim-0.0.76}/tests/python/states/wick_test.py +0 -0
  239. {ffsim-0.0.75 → ffsim-0.0.76}/tests/python/test_data/orbital_rotation-0.npy +0 -0
  240. {ffsim-0.0.75 → ffsim-0.0.76}/tests/python/test_no_warnings.py +0 -0
  241. {ffsim-0.0.75 → ffsim-0.0.76}/tests/python/testing_test.py +0 -0
  242. {ffsim-0.0.75 → ffsim-0.0.76}/tests/python/trotter/__init__.py +0 -0
  243. {ffsim-0.0.75 → ffsim-0.0.76}/tests/python/trotter/diag_coulomb_split_op_test.py +0 -0
  244. {ffsim-0.0.75 → ffsim-0.0.76}/tests/python/trotter/double_factorized_test.py +0 -0
  245. {ffsim-0.0.75 → ffsim-0.0.76}/tests/python/trotter/qdrift_test.py +0 -0
  246. {ffsim-0.0.75 → ffsim-0.0.76}/tests/python/variational/__init__.py +0 -0
  247. {ffsim-0.0.75 → ffsim-0.0.76}/tests/python/variational/givens_test.py +0 -0
  248. {ffsim-0.0.75 → ffsim-0.0.76}/tests/python/variational/hopgate_test.py +0 -0
  249. {ffsim-0.0.75 → ffsim-0.0.76}/tests/python/variational/multireference_test.py +0 -0
  250. {ffsim-0.0.75 → ffsim-0.0.76}/tests/python/variational/num_num_test.py +0 -0
  251. {ffsim-0.0.75 → ffsim-0.0.76}/tests/python/variational/orbital_optimization_test.py +0 -0
  252. {ffsim-0.0.75 → ffsim-0.0.76}/tests/python/variational/uccsd_test.py +0 -0
  253. {ffsim-0.0.75 → ffsim-0.0.76}/tests/python/variational/ucj_angles_spin_balanced_test.py +0 -0
  254. {ffsim-0.0.75 → ffsim-0.0.76}/tests/python/variational/ucj_spin_balanced_test.py +0 -0
  255. {ffsim-0.0.75 → ffsim-0.0.76}/tests/python/variational/ucj_spin_unbalanced_test.py +0 -0
  256. {ffsim-0.0.75 → ffsim-0.0.76}/tests/python/variational/ucj_spinless_test.py +0 -0
@@ -50,8 +50,6 @@ jobs:
50
50
  permissions:
51
51
  id-token: write
52
52
  if: github.event_name == 'release' && github.event.action == 'published'
53
- # or, alternatively, upload to PyPI on every tag starting with 'v' (remove on: release above to use this)
54
- # if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v')
55
53
  steps:
56
54
  - uses: actions/download-artifact@v4
57
55
  with:
@@ -22,7 +22,7 @@ jobs:
22
22
  - uses: actions/checkout@v6
23
23
  - name: Install dependencies
24
24
  run: |
25
- sudo apt install -y libopenblas-dev pandoc
25
+ sudo apt install -y pandoc
26
26
  - name: Set up Python
27
27
  uses: actions/setup-python@v6
28
28
  with:
@@ -21,7 +21,7 @@ jobs:
21
21
  python -m pip install --upgrade pip
22
22
  pip install tox
23
23
  sudo apt update
24
- sudo apt install -y libopenblas-dev pandoc
24
+ sudo apt install -y pandoc
25
25
  - name: Build docs
26
26
  run: |
27
27
  tox run -e docs
@@ -21,7 +21,7 @@ jobs:
21
21
  python -m pip install --upgrade pip
22
22
  pip install tox
23
23
  sudo apt update
24
- sudo apt install -y libopenblas-dev pandoc
24
+ sudo apt install -y pandoc
25
25
  - name: Build docs
26
26
  run: |
27
27
  tox run -e docs
@@ -20,9 +20,6 @@ jobs:
20
20
  python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"]
21
21
  steps:
22
22
  - uses: actions/checkout@v6
23
- - name: Install dependencies
24
- run: |
25
- sudo apt install -y libopenblas-dev
26
23
  - name: Set up Python
27
24
  uses: actions/setup-python@v6
28
25
  with:
@@ -41,9 +38,6 @@ jobs:
41
38
  python-version: ["3.10", "3.14"]
42
39
  steps:
43
40
  - uses: actions/checkout@v6
44
- - name: Install dependencies
45
- run: |
46
- sudo apt install -y libopenblas-dev
47
41
  - name: Set up Python
48
42
  uses: actions/setup-python@v6
49
43
  with:
@@ -20,9 +20,6 @@ jobs:
20
20
  python-version: ["3.10"]
21
21
  steps:
22
22
  - uses: actions/checkout@v6
23
- - name: Install dependencies
24
- run: |
25
- sudo apt install -y libopenblas-dev
26
23
  - name: Set up Python
27
24
  uses: actions/setup-python@v6
28
25
  with:
@@ -0,0 +1,319 @@
1
+ # This file is automatically @generated by Cargo.
2
+ # It is not intended for manual editing.
3
+ version = 4
4
+
5
+ [[package]]
6
+ name = "autocfg"
7
+ version = "1.1.0"
8
+ source = "registry+https://github.com/rust-lang/crates.io-index"
9
+ checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
10
+
11
+ [[package]]
12
+ name = "cfg-if"
13
+ version = "1.0.0"
14
+ source = "registry+https://github.com/rust-lang/crates.io-index"
15
+ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
16
+
17
+ [[package]]
18
+ name = "crossbeam-deque"
19
+ version = "0.8.3"
20
+ source = "registry+https://github.com/rust-lang/crates.io-index"
21
+ checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef"
22
+ dependencies = [
23
+ "cfg-if",
24
+ "crossbeam-epoch",
25
+ "crossbeam-utils",
26
+ ]
27
+
28
+ [[package]]
29
+ name = "crossbeam-epoch"
30
+ version = "0.9.15"
31
+ source = "registry+https://github.com/rust-lang/crates.io-index"
32
+ checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7"
33
+ dependencies = [
34
+ "autocfg",
35
+ "cfg-if",
36
+ "crossbeam-utils",
37
+ "memoffset",
38
+ "scopeguard",
39
+ ]
40
+
41
+ [[package]]
42
+ name = "crossbeam-utils"
43
+ version = "0.8.16"
44
+ source = "registry+https://github.com/rust-lang/crates.io-index"
45
+ checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294"
46
+ dependencies = [
47
+ "cfg-if",
48
+ ]
49
+
50
+ [[package]]
51
+ name = "either"
52
+ version = "1.8.1"
53
+ source = "registry+https://github.com/rust-lang/crates.io-index"
54
+ checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91"
55
+
56
+ [[package]]
57
+ name = "ffsim"
58
+ version = "0.0.0"
59
+ dependencies = [
60
+ "ndarray",
61
+ "num-integer",
62
+ "numpy",
63
+ "pyo3",
64
+ "rayon",
65
+ ]
66
+
67
+ [[package]]
68
+ name = "heck"
69
+ version = "0.5.0"
70
+ source = "registry+https://github.com/rust-lang/crates.io-index"
71
+ checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
72
+
73
+ [[package]]
74
+ name = "indoc"
75
+ version = "2.0.5"
76
+ source = "registry+https://github.com/rust-lang/crates.io-index"
77
+ checksum = "b248f5224d1d606005e02c97f5aa4e88eeb230488bcc03bc9ca4d7991399f2b5"
78
+
79
+ [[package]]
80
+ name = "libc"
81
+ version = "0.2.147"
82
+ source = "registry+https://github.com/rust-lang/crates.io-index"
83
+ checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3"
84
+
85
+ [[package]]
86
+ name = "matrixmultiply"
87
+ version = "0.3.7"
88
+ source = "registry+https://github.com/rust-lang/crates.io-index"
89
+ checksum = "090126dc04f95dc0d1c1c91f61bdd474b3930ca064c1edc8a849da2c6cbe1e77"
90
+ dependencies = [
91
+ "autocfg",
92
+ "rawpointer",
93
+ ]
94
+
95
+ [[package]]
96
+ name = "memoffset"
97
+ version = "0.9.0"
98
+ source = "registry+https://github.com/rust-lang/crates.io-index"
99
+ checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c"
100
+ dependencies = [
101
+ "autocfg",
102
+ ]
103
+
104
+ [[package]]
105
+ name = "ndarray"
106
+ version = "0.15.6"
107
+ source = "registry+https://github.com/rust-lang/crates.io-index"
108
+ checksum = "adb12d4e967ec485a5f71c6311fe28158e9d6f4bc4a447b474184d0f91a8fa32"
109
+ dependencies = [
110
+ "matrixmultiply",
111
+ "num-complex",
112
+ "num-integer",
113
+ "num-traits",
114
+ "rawpointer",
115
+ "rayon",
116
+ ]
117
+
118
+ [[package]]
119
+ name = "num-complex"
120
+ version = "0.4.6"
121
+ source = "registry+https://github.com/rust-lang/crates.io-index"
122
+ checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495"
123
+ dependencies = [
124
+ "num-traits",
125
+ ]
126
+
127
+ [[package]]
128
+ name = "num-integer"
129
+ version = "0.1.45"
130
+ source = "registry+https://github.com/rust-lang/crates.io-index"
131
+ checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
132
+ dependencies = [
133
+ "autocfg",
134
+ "num-traits",
135
+ ]
136
+
137
+ [[package]]
138
+ name = "num-traits"
139
+ version = "0.2.19"
140
+ source = "registry+https://github.com/rust-lang/crates.io-index"
141
+ checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841"
142
+ dependencies = [
143
+ "autocfg",
144
+ ]
145
+
146
+ [[package]]
147
+ name = "numpy"
148
+ version = "0.27.1"
149
+ source = "registry+https://github.com/rust-lang/crates.io-index"
150
+ checksum = "7aac2e6a6e4468ffa092ad43c39b81c79196c2bb773b8db4085f695efe3bba17"
151
+ dependencies = [
152
+ "libc",
153
+ "ndarray",
154
+ "num-complex",
155
+ "num-integer",
156
+ "num-traits",
157
+ "pyo3",
158
+ "pyo3-build-config",
159
+ "rustc-hash",
160
+ ]
161
+
162
+ [[package]]
163
+ name = "once_cell"
164
+ version = "1.21.3"
165
+ source = "registry+https://github.com/rust-lang/crates.io-index"
166
+ checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d"
167
+
168
+ [[package]]
169
+ name = "portable-atomic"
170
+ version = "1.7.0"
171
+ source = "registry+https://github.com/rust-lang/crates.io-index"
172
+ checksum = "da544ee218f0d287a911e9c99a39a8c9bc8fcad3cb8db5959940044ecfc67265"
173
+
174
+ [[package]]
175
+ name = "proc-macro2"
176
+ version = "1.0.105"
177
+ source = "registry+https://github.com/rust-lang/crates.io-index"
178
+ checksum = "535d180e0ecab6268a3e718bb9fd44db66bbbc256257165fc699dadf70d16fe7"
179
+ dependencies = [
180
+ "unicode-ident",
181
+ ]
182
+
183
+ [[package]]
184
+ name = "pyo3"
185
+ version = "0.27.2"
186
+ source = "registry+https://github.com/rust-lang/crates.io-index"
187
+ checksum = "ab53c047fcd1a1d2a8820fe84f05d6be69e9526be40cb03b73f86b6b03e6d87d"
188
+ dependencies = [
189
+ "indoc",
190
+ "libc",
191
+ "memoffset",
192
+ "num-complex",
193
+ "once_cell",
194
+ "portable-atomic",
195
+ "pyo3-build-config",
196
+ "pyo3-ffi",
197
+ "pyo3-macros",
198
+ "unindent",
199
+ ]
200
+
201
+ [[package]]
202
+ name = "pyo3-build-config"
203
+ version = "0.27.2"
204
+ source = "registry+https://github.com/rust-lang/crates.io-index"
205
+ checksum = "b455933107de8642b4487ed26d912c2d899dec6114884214a0b3bb3be9261ea6"
206
+ dependencies = [
207
+ "target-lexicon",
208
+ ]
209
+
210
+ [[package]]
211
+ name = "pyo3-ffi"
212
+ version = "0.27.2"
213
+ source = "registry+https://github.com/rust-lang/crates.io-index"
214
+ checksum = "1c85c9cbfaddf651b1221594209aed57e9e5cff63c4d11d1feead529b872a089"
215
+ dependencies = [
216
+ "libc",
217
+ "pyo3-build-config",
218
+ ]
219
+
220
+ [[package]]
221
+ name = "pyo3-macros"
222
+ version = "0.27.2"
223
+ source = "registry+https://github.com/rust-lang/crates.io-index"
224
+ checksum = "0a5b10c9bf9888125d917fb4d2ca2d25c8df94c7ab5a52e13313a07e050a3b02"
225
+ dependencies = [
226
+ "proc-macro2",
227
+ "pyo3-macros-backend",
228
+ "quote",
229
+ "syn",
230
+ ]
231
+
232
+ [[package]]
233
+ name = "pyo3-macros-backend"
234
+ version = "0.27.2"
235
+ source = "registry+https://github.com/rust-lang/crates.io-index"
236
+ checksum = "03b51720d314836e53327f5871d4c0cfb4fb37cc2c4a11cc71907a86342c40f9"
237
+ dependencies = [
238
+ "heck",
239
+ "proc-macro2",
240
+ "pyo3-build-config",
241
+ "quote",
242
+ "syn",
243
+ ]
244
+
245
+ [[package]]
246
+ name = "quote"
247
+ version = "1.0.43"
248
+ source = "registry+https://github.com/rust-lang/crates.io-index"
249
+ checksum = "dc74d9a594b72ae6656596548f56f667211f8a97b3d4c3d467150794690dc40a"
250
+ dependencies = [
251
+ "proc-macro2",
252
+ ]
253
+
254
+ [[package]]
255
+ name = "rawpointer"
256
+ version = "0.2.1"
257
+ source = "registry+https://github.com/rust-lang/crates.io-index"
258
+ checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3"
259
+
260
+ [[package]]
261
+ name = "rayon"
262
+ version = "1.11.0"
263
+ source = "registry+https://github.com/rust-lang/crates.io-index"
264
+ checksum = "368f01d005bf8fd9b1206fb6fa653e6c4a81ceb1466406b81792d87c5677a58f"
265
+ dependencies = [
266
+ "either",
267
+ "rayon-core",
268
+ ]
269
+
270
+ [[package]]
271
+ name = "rayon-core"
272
+ version = "1.13.0"
273
+ source = "registry+https://github.com/rust-lang/crates.io-index"
274
+ checksum = "22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91"
275
+ dependencies = [
276
+ "crossbeam-deque",
277
+ "crossbeam-utils",
278
+ ]
279
+
280
+ [[package]]
281
+ name = "rustc-hash"
282
+ version = "2.1.1"
283
+ source = "registry+https://github.com/rust-lang/crates.io-index"
284
+ checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d"
285
+
286
+ [[package]]
287
+ name = "scopeguard"
288
+ version = "1.1.0"
289
+ source = "registry+https://github.com/rust-lang/crates.io-index"
290
+ checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
291
+
292
+ [[package]]
293
+ name = "syn"
294
+ version = "2.0.114"
295
+ source = "registry+https://github.com/rust-lang/crates.io-index"
296
+ checksum = "d4d107df263a3013ef9b1879b0df87d706ff80f65a86ea879bd9c31f9b307c2a"
297
+ dependencies = [
298
+ "proc-macro2",
299
+ "quote",
300
+ "unicode-ident",
301
+ ]
302
+
303
+ [[package]]
304
+ name = "target-lexicon"
305
+ version = "0.13.4"
306
+ source = "registry+https://github.com/rust-lang/crates.io-index"
307
+ checksum = "b1dd07eb858a2067e2f3c7155d54e929265c264e6f37efe3ee7a8d1b5a1dd0ba"
308
+
309
+ [[package]]
310
+ name = "unicode-ident"
311
+ version = "1.0.9"
312
+ source = "registry+https://github.com/rust-lang/crates.io-index"
313
+ checksum = "b15811caf2415fb889178633e7724bad2509101cde276048e013b9def5e51fa0"
314
+
315
+ [[package]]
316
+ name = "unindent"
317
+ version = "0.2.3"
318
+ source = "registry+https://github.com/rust-lang/crates.io-index"
319
+ checksum = "c7de7d73e1754487cb58364ee906a499937a0dfabd86bcb980fa99ec8c8fa2ce"
@@ -10,8 +10,6 @@ name = "ffsim"
10
10
  crate-type = ["cdylib"]
11
11
 
12
12
  [dependencies]
13
- blas = "0.23"
14
- blas-src = "0.14"
15
13
  ndarray = { version = "0.15", features = ["rayon"] }
16
14
  num-integer = "0.1"
17
15
  numpy = "0.27"
@@ -21,7 +19,3 @@ pyo3 = { version = "0.27", features = [
21
19
  "abi3-py310",
22
20
  ] }
23
21
  rayon = "1.11"
24
-
25
- [target.'cfg(target_os = "linux")'.dependencies]
26
- blas-src = { version = "0.14", features = ["openblas"] }
27
- openblas-src = { version = "0.10", features = ["system"] }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ffsim
3
- Version: 0.0.75
3
+ Version: 0.0.76
4
4
  Classifier: License :: OSI Approved :: Apache Software License
5
5
  Classifier: Programming Language :: Python
6
6
  Classifier: Programming Language :: Python :: 3 :: Only
@@ -69,6 +69,22 @@ This method won't work natively on Windows, however. Refer to the [installation
69
69
 
70
70
  <!-- end installation -->
71
71
 
72
+ ## Get started
73
+
74
+ <!-- start get-started -->
75
+
76
+ Visit [*State vectors and gates*](https://qiskit-community.github.io/ffsim/explanations/state-vectors-and-gates.html) to start learning ffsim's core concepts, or jump straight into a [tutorial](https://qiskit-community.github.io/ffsim/tutorials/double-factorized-trotter.html). Check out the [guides](https://qiskit-community.github.io/ffsim/how-to-guides/index.html) for help with specific tasks, or visit the [API reference](https://qiskit-community.github.io/ffsim/api/index.html) for detailed documentation of all function and classes available in the library.
77
+
78
+ <!-- end get-started -->
79
+
80
+ ## Multithreading
81
+
82
+ <!-- start multithreading -->
83
+
84
+ Some ffsim functions implemented in Rust use multithreading. The number of threads can be controlled using the environment variable `RAYON_NUM_THREADS`. For example, to disable multithreading, set this variable as `RAYON_NUM_THREADS=1`.
85
+
86
+ <!-- end multithreading -->
87
+
72
88
  ## Code example
73
89
 
74
90
  <!-- start code-example -->
@@ -104,10 +120,6 @@ print(energy) # prints -104.17181289596
104
120
 
105
121
  <!-- end code-example -->
106
122
 
107
- ## Multithreading
108
-
109
- Some ffsim functions implemented in Rust use multithreading. The number of threads can be set using the environment variable `RAYON_NUM_THREADS`. For example, to disable multithreading, set this variable as `RAYON_NUM_THREADS=1`.
110
-
111
123
  ## Citing ffsim
112
124
 
113
125
  <!-- start citing -->
@@ -24,6 +24,22 @@ This method won't work natively on Windows, however. Refer to the [installation
24
24
 
25
25
  <!-- end installation -->
26
26
 
27
+ ## Get started
28
+
29
+ <!-- start get-started -->
30
+
31
+ Visit [*State vectors and gates*](https://qiskit-community.github.io/ffsim/explanations/state-vectors-and-gates.html) to start learning ffsim's core concepts, or jump straight into a [tutorial](https://qiskit-community.github.io/ffsim/tutorials/double-factorized-trotter.html). Check out the [guides](https://qiskit-community.github.io/ffsim/how-to-guides/index.html) for help with specific tasks, or visit the [API reference](https://qiskit-community.github.io/ffsim/api/index.html) for detailed documentation of all function and classes available in the library.
32
+
33
+ <!-- end get-started -->
34
+
35
+ ## Multithreading
36
+
37
+ <!-- start multithreading -->
38
+
39
+ Some ffsim functions implemented in Rust use multithreading. The number of threads can be controlled using the environment variable `RAYON_NUM_THREADS`. For example, to disable multithreading, set this variable as `RAYON_NUM_THREADS=1`.
40
+
41
+ <!-- end multithreading -->
42
+
27
43
  ## Code example
28
44
 
29
45
  <!-- start code-example -->
@@ -59,10 +75,6 @@ print(energy) # prints -104.17181289596
59
75
 
60
76
  <!-- end code-example -->
61
77
 
62
- ## Multithreading
63
-
64
- Some ffsim functions implemented in Rust use multithreading. The number of threads can be set using the environment variable `RAYON_NUM_THREADS`. For example, to disable multithreading, set this variable as `RAYON_NUM_THREADS=1`.
65
-
66
78
  ## Citing ffsim
67
79
 
68
80
  <!-- start citing -->
@@ -114,7 +114,7 @@
114
114
  "source": [
115
115
  "n_reps = 2\n",
116
116
  "\n",
117
- "# Construct from random t2- and t1-amplitudes. The t2-amplitudes are double factorized\n",
117
+ "# Construct from random t2- and t1-amplitudes. The t2-amplitudes are double-factorized\n",
118
118
  "# to obtain the diagonal Coulomb matries and orbital rotations. The t1-amplitudes are\n",
119
119
  "# used to set a final orbital rotation.\n",
120
120
  "t2 = ffsim.random.random_t2_amplitudes(norb, nocc, seed=rng, dtype=float)\n",
@@ -12,6 +12,20 @@
12
12
  :end-before: <!-- end installation -->
13
13
  ```
14
14
 
15
+ ## Get started
16
+
17
+ ```{include} ../README.md
18
+ :start-after: <!-- start get-started -->
19
+ :end-before: <!-- end get-started -->
20
+ ```
21
+
22
+ ## Multithreading
23
+
24
+ ```{include} ../README.md
25
+ :start-after: <!-- start multithreading -->
26
+ :end-before: <!-- end multithreading -->
27
+ ```
28
+
15
29
  ## Code example
16
30
 
17
31
  ```{include} ../README.md
@@ -0,0 +1,43 @@
1
+ # Installation
2
+
3
+ ffsim is supported directly on Linux and macOS.
4
+
5
+ ffsim is not supported directly on Windows. Windows users have two main options:
6
+
7
+ - Use [Windows Subsystem for Linux (WSL)](https://learn.microsoft.com/en-us/windows/wsl/). WSL provides a Linux environment where ffsim can be pip installed from PyPI or from source.
8
+ - Use ffsim within Docker. See [Use within Docker](#use-within-docker).
9
+
10
+ ## Pip install
11
+
12
+ ffsim is available on [PyPI](https://pypi.org/project/ffsim/). You can install it by running
13
+
14
+ ```bash
15
+ pip install ffsim
16
+ ```
17
+
18
+ ## Install from source
19
+
20
+ You can use pip to install ffsim from source. For example:
21
+
22
+ ```bash
23
+ git clone https://github.com/qiskit-community/ffsim.git
24
+ cd ffsim
25
+ pip install .
26
+ ```
27
+
28
+ ## Use within Docker
29
+
30
+ We provide a [Dockerfile](https://github.com/qiskit-community/ffsim/blob/main/Dockerfile) and a [compose.yaml](https://github.com/qiskit-community/ffsim/blob/main/compose.yaml) file, which you can use to build a [Docker](https://www.docker.com/) image with just a few simple commands:
31
+
32
+ ```bash
33
+ git clone https://github.com/qiskit-community/ffsim.git
34
+ cd ffsim
35
+ docker compose build
36
+ docker compose up
37
+ ```
38
+
39
+ Depending on your system configuration, you may need to type `sudo` before each `docker` command.
40
+
41
+ Once the container is running, navigate to <http://localhost:58888> in a web browser to access the Jupyter Notebook interface.
42
+
43
+ The home directory includes a subdirectory named `persistent-volume`. All work you’d like to save should be placed in this directory, as it is the only one that will be saved across different container runs.
@@ -4,7 +4,7 @@
4
4
  "cell_type": "markdown",
5
5
  "metadata": {},
6
6
  "source": [
7
- "# Implementing Trotter simulation of the double-factorized Hamiltonian\n",
7
+ "# Implement Trotter simulation of the double-factorized Hamiltonian\n",
8
8
  "\n",
9
9
  "In this tutorial, we'll write a function to implement approximate time evolution of the double-factorized Hamiltonian via a Trotter-Suzuki formula. See [Double-factorized representation of the molecular Hamiltonian](../explanations/double-factorized.ipynb) for background information. We'll compare our implementation with exact time evolution computed using direct operator exponentiation, as well as ffsim's built-in implementation [simulate_trotter_double_factorized](../api/stubs/ffsim.simulate_trotter_double_factorized.rst#ffsim.simulate_trotter_double_factorized).\n",
10
10
  "\n",
@@ -5,7 +5,7 @@ build-backend = "maturin"
5
5
  [project]
6
6
  name = "ffsim"
7
7
  requires-python = ">=3.10"
8
- version = "0.0.75"
8
+ version = "0.0.76"
9
9
  description = "Faster simulation of fermionic quantum circuits."
10
10
  readme = "README.md"
11
11
  license = { file = "LICENSE" }
@@ -69,7 +69,7 @@ test-requires = "pytest"
69
69
  test-command = "pytest {project}/tests"
70
70
 
71
71
  [tool.cibuildwheel.linux]
72
- before-all = "dnf install -y openblas-devel openssl-devel"
72
+ before-all = "dnf install -y openssl-devel"
73
73
 
74
74
  [tool.pytest.ini_options]
75
75
  testpaths = ["tests"]
@@ -11,7 +11,7 @@ class FermionOperator(MutableMapping[tuple[tuple[bool, bool, int], ...], complex
11
11
  def conserves_particle_number(self) -> bool: ...
12
12
  def conserves_spin_z(self) -> bool: ...
13
13
  def many_body_order(self) -> int: ...
14
- def simplify(self, tol: float = 1e-8) -> None: ...
14
+ def simplify(self, tol: float = ...) -> None: ...
15
15
  def copy(self) -> FermionOperator: ...
16
16
  def __getitem__(self, key: tuple[tuple[bool, bool, int], ...]) -> complex: ...
17
17
  def __setitem__(self, key: tuple[tuple[bool, bool, int], ...], complex) -> None: ...
@@ -40,7 +40,7 @@ def apply_givens_rotation_in_place(
40
40
  vec: np.ndarray, c: float, s: complex, slice1: np.ndarray, slice2: np.ndarray
41
41
  ) -> None: ...
42
42
  def givens_decomposition(
43
- mat: np.ndarray,
43
+ mat: np.ndarray, tol: float = ...
44
44
  ) -> tuple[list[tuple[float, complex, int, int]], np.ndarray]: ...
45
45
  def apply_num_op_sum_evolution_in_place(
46
46
  vec: np.ndarray,
@@ -92,7 +92,7 @@ def zrotg(a: complex, b: complex, tol=1e-12) -> tuple[float, complex]:
92
92
 
93
93
 
94
94
  def givens_decomposition(
95
- mat: np.ndarray,
95
+ mat: np.ndarray, tol: float = 1e-12
96
96
  ) -> tuple[list[tuple[float, complex, int, int]], np.ndarray]:
97
97
  r"""Givens rotation decomposition of a unitary matrix.
98
98
 
@@ -135,6 +135,7 @@ def givens_decomposition(
135
135
 
136
136
  Args:
137
137
  mat: The unitary matrix to decompose into Givens rotations.
138
+ tol: Matrix entries smaller than this value will be treated as equal to zero.
138
139
 
139
140
  Returns:
140
141
  - A list containing the Givens rotations :math:`G_1, \ldots, G_L`.
@@ -146,4 +147,4 @@ def givens_decomposition(
146
147
 
147
148
  .. _Clements et al., "Optimal design for universal multiport interferometers" (2016): https://doi.org/10.1364/OPTICA.3.001460
148
149
  """ # noqa: E501
149
- return _lib.givens_decomposition(np.asarray(mat, dtype=complex))
150
+ return _lib.givens_decomposition(mat.astype(complex, copy=False), tol=tol)
@@ -72,8 +72,8 @@ def singles_excitations_unrestricted(
72
72
  - :math:`a` runs over virtual spin-up orbitals,
73
73
  - :math:`I` runs over occupied spin-down orbitals,
74
74
  - :math:`A` runs over virtual spin-down orbitals,
75
- - :math:`t^{(\alpha})_{ia}` are the spin-up singles amplitudes, and
76
- - :math:`t^{(\beta})_{IA}` are the spin-down singles amplitudes.
75
+ - :math:`t^{(\alpha)}_{ia}` are the spin-up singles amplitudes, and
76
+ - :math:`t^{(\beta)}_{IA}` are the spin-down singles amplitudes.
77
77
 
78
78
  Args:
79
79
  t1: The singles amplitudes. This should be a pair of Numpy arrays,
@@ -150,12 +150,12 @@ def doubles_excitations_unrestricted(
150
150
 
151
151
  .. math::
152
152
 
153
- T_2 = \frac12 \sum_{ijab} t^{(\alpha \alpha)}_{ijab}
153
+ T_2 = \frac14 \sum_{ijab} t^{(\alpha \alpha)}_{ijab}
154
154
  a^\dagger_{a\alpha} a^\dagger_{b\alpha} a_{j\alpha} a_{i\alpha} +
155
- \frac12 \sum_{ijab} t^{(\beta \beta)}_{IJAB}
156
- a^\dagger_{a\beta} a^\dagger_{b\beta} a_{j\beta} a_{i\beta} \right) +
157
- \sum_{ijab} t^{(\alpha \beta)}_{iJaB}
158
- + a^\dagger_{a\alpha} a^\dagger_{B\beta} a_{J\beta} a_{i\alpha}
155
+ \frac14 \sum_{IJAB} t^{(\beta \beta)}_{IJAB}
156
+ a^\dagger_{A\beta} a^\dagger_{B\beta} a_{J\beta} a_{I\beta} +
157
+ \sum_{iJaB} t^{(\alpha \beta)}_{iJaB}
158
+ a^\dagger_{a\alpha} a^\dagger_{B\beta} a_{J\beta} a_{i\alpha}
159
159
 
160
160
  where
161
161
 
@@ -163,12 +163,12 @@ def doubles_excitations_unrestricted(
163
163
  - :math:`a` and :math:`b` run over virtual spin-up orbitals,
164
164
  - :math:`I` and :math:`J` run over occupied spin-down orbitals,
165
165
  - :math:`A` and :math:`B` run over virtual spin-down orbitals,
166
- - :math:`t^{(\alpha \alpha})_{ijab}` are the doubles amplitudes within spin-up
166
+ - :math:`t^{(\alpha \alpha)}_{ijab}` are the doubles amplitudes within spin-up
167
167
  orbitals,
168
- - :math:`t^{(\alpha beta})_{iJaB}` are the doubles amplitudes between spin-up
169
- and spin-down orbitals, and
170
- - :math:`t^{(\beta \beta})_{IJAB}` are the doubles amplitudes within spin-down
171
- orbitals.
168
+ - :math:`t^{(\beta \beta)}_{IJAB}` are the doubles amplitudes within spin-down
169
+ orbitals, and
170
+ - :math:`t^{(\alpha \beta)}_{iJaB}` are the doubles amplitudes between spin-up
171
+ and spin-down orbitals.
172
172
 
173
173
  Args:
174
174
  t2: The doubles amplitudes. This should be a tuple of three of Numpy arrays,