squlearn 0.11.2__tar.gz → 0.12.0__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 (270) hide show
  1. {squlearn-0.11.2 → squlearn-0.12.0}/PKG-INFO +16 -13
  2. {squlearn-0.11.2 → squlearn-0.12.0}/pyproject.toml +13 -11
  3. {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/__init__.py +1 -1
  4. {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/encoding_circuit/circuit_library/chebyshev_pqc.py +13 -13
  5. {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/encoding_circuit/circuit_library/chebyshev_rx.py +10 -10
  6. {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/encoding_circuit/circuit_library/chebyshev_tower.py +11 -11
  7. {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/encoding_circuit/circuit_library/highdim_encoding_circuit.py +22 -31
  8. {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/encoding_circuit/circuit_library/hubregtsen_encoding_circuit.py +11 -12
  9. {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/encoding_circuit/circuit_library/kyriienko_nonlinear_encoding_circuit.py +11 -12
  10. {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/encoding_circuit/circuit_library/multi_control_encoding_circuit.py +13 -14
  11. {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/encoding_circuit/circuit_library/param_z_feature_map.py +6 -7
  12. {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/encoding_circuit/circuit_library/qcnn_encoding_circuit.py +69 -63
  13. {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/encoding_circuit/circuit_library/qiskit_encoding_circuit.py +14 -10
  14. {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/encoding_circuit/circuit_library/random_encoding_circuit.py +44 -70
  15. {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/encoding_circuit/circuit_library/random_layered_encoding_circuit.py +5 -5
  16. {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/encoding_circuit/circuit_library/yz_cx_encoding_circuit.py +7 -8
  17. {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/encoding_circuit/encoding_circuit_base.py +24 -22
  18. {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/encoding_circuit/encoding_circuit_derivatives.py +29 -16
  19. {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/encoding_circuit/layered_encoding_circuit.py +264 -208
  20. {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/encoding_circuit/pruned_encoding_circuit.py +38 -53
  21. {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/encoding_circuit/transpiled_encoding_circuit.py +31 -20
  22. {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/kernel/lowlevel_kernel/fidelity_kernel.py +31 -9
  23. {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/kernel/lowlevel_kernel/fidelity_kernel_expectation_value.py +2 -7
  24. {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/kernel/lowlevel_kernel/fidelity_kernel_statevector.py +47 -89
  25. {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/kernel/lowlevel_kernel/projected_quantum_kernel.py +9 -13
  26. {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/observables/observable_base.py +41 -58
  27. {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/observables/observable_derivatives.py +31 -20
  28. {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/observables/observable_implemented/custom_observable.py +10 -11
  29. {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/observables/observable_implemented/ising_hamiltonian.py +9 -10
  30. {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/observables/observable_implemented/single_pauli.py +7 -8
  31. {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/observables/observable_implemented/single_probability.py +8 -9
  32. {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/observables/observable_implemented/summed_paulis.py +7 -8
  33. {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/observables/observable_implemented/summed_probabilities.py +10 -10
  34. {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/qnn/base_qnn.py +4 -14
  35. {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/qnn/lowlevel_qnn/evaluation_classes.py +17 -17
  36. squlearn-0.12.0/src/squlearn/qnn/lowlevel_qnn/lowlevel_qnn.py +1001 -0
  37. {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/qnn/qnnc.py +0 -5
  38. {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/qnn/qnnr.py +0 -6
  39. {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/qnn/util/barren_plateau_analysis.py +3 -3
  40. {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/qnn/util/training.py +5 -5
  41. {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/qrc/base_qrc.py +7 -3
  42. {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/util/__init__.py +1 -1
  43. squlearn-0.12.0/src/squlearn/util/circuit_utils.py +36 -0
  44. squlearn-0.12.0/src/squlearn/util/data_preprocessing.py +36 -0
  45. {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/util/executor.py +343 -1179
  46. squlearn-0.12.0/src/squlearn/util/operator_utils.py +69 -0
  47. {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/util/qfi.py +12 -14
  48. squlearn-0.12.0/src/squlearn/util/symbolic_math.py +64 -0
  49. squlearn-0.11.2/.github/CODE_OF_CONDUCT.md +0 -134
  50. squlearn-0.11.2/.github/CONTRIBUTING.md +0 -48
  51. squlearn-0.11.2/.github/ISSUE_TEMPLATE/bug_report.md +0 -24
  52. squlearn-0.11.2/.github/ISSUE_TEMPLATE/feature_request.md +0 -20
  53. squlearn-0.11.2/.github/workflows/doc_checks.yml +0 -26
  54. squlearn-0.11.2/.github/workflows/elaborate_tests.yaml +0 -165
  55. squlearn-0.11.2/.github/workflows/format.yml +0 -31
  56. squlearn-0.11.2/.github/workflows/publish.yml +0 -30
  57. squlearn-0.11.2/.github/workflows/publish_docs.yml +0 -48
  58. squlearn-0.11.2/.github/workflows/quick_tests.yaml +0 -45
  59. squlearn-0.11.2/.github/workflows/stale.yml +0 -20
  60. squlearn-0.11.2/.gitignore +0 -176
  61. squlearn-0.11.2/CITATION.cff +0 -45
  62. squlearn-0.11.2/docs/Makefile +0 -20
  63. squlearn-0.11.2/docs/README.md +0 -23
  64. squlearn-0.11.2/docs/_static/css/custom.css +0 -106
  65. squlearn-0.11.2/docs/_static/favicon.png +0 -0
  66. squlearn-0.11.2/docs/_static/logo.png +0 -0
  67. squlearn-0.11.2/docs/_static/qkm/QKM_scheme_pic.jpg +0 -0
  68. squlearn-0.11.2/docs/_static/qnn/qnn.svg +0 -272
  69. squlearn-0.11.2/docs/_static/qrc/QRC_user_guide.png +0 -0
  70. squlearn-0.11.2/docs/_static/qrc/qrc_classification_transparent.png +0 -0
  71. squlearn-0.11.2/docs/_static/qrc/qrc_regression_transparent.png +0 -0
  72. squlearn-0.11.2/docs/_static/schematic.png +0 -0
  73. squlearn-0.11.2/docs/_static/util/executor.png +0 -0
  74. squlearn-0.11.2/docs/_templates/class.rst +0 -6
  75. squlearn-0.11.2/docs/_templates/class_with_call.rst +0 -19
  76. squlearn-0.11.2/docs/_templates/function.rst +0 -7
  77. squlearn-0.11.2/docs/conf.py +0 -123
  78. squlearn-0.11.2/docs/examples/example_kernel_digit_classification.nblink +0 -6
  79. squlearn-0.11.2/docs/examples/example_kernel_grid_search.nblink +0 -3
  80. squlearn-0.11.2/docs/examples/example_ode_solver.nblink +0 -6
  81. squlearn-0.11.2/docs/examples/example_qnn_backend_mitigation.nblink +0 -6
  82. squlearn-0.11.2/docs/examples/example_quantum_bayesian_optimization.nblink +0 -6
  83. squlearn-0.11.2/docs/examples/examples_index.rst +0 -14
  84. squlearn-0.11.2/docs/index.rst +0 -20
  85. squlearn-0.11.2/docs/install/install.rst +0 -83
  86. squlearn-0.11.2/docs/make.bat +0 -46
  87. squlearn-0.11.2/docs/modules/classes.rst +0 -322
  88. squlearn-0.11.2/docs/qiskit_settings.conf +0 -3
  89. squlearn-0.11.2/docs/spelling_wordlist.txt +0 -56
  90. squlearn-0.11.2/docs/user_guide/encoding_circuits.rst +0 -222
  91. squlearn-0.11.2/docs/user_guide/executor.rst +0 -566
  92. squlearn-0.11.2/docs/user_guide/kernel_methods.rst +0 -290
  93. squlearn-0.11.2/docs/user_guide/observables.rst +0 -172
  94. squlearn-0.11.2/docs/user_guide/quantum_neural_networks.rst +0 -460
  95. squlearn-0.11.2/docs/user_guide/quantum_reservoir_computing.rst +0 -264
  96. squlearn-0.11.2/docs/user_guide/user_guide_index.rst +0 -14
  97. squlearn-0.11.2/examples/encoding_circuits/layered_encoding_circuit.ipynb +0 -179
  98. squlearn-0.11.2/examples/encoding_circuits/pruning_example.ipynb +0 -248
  99. squlearn-0.11.2/examples/encoding_circuits/various_encoding_circuit.ipynb +0 -282
  100. squlearn-0.11.2/examples/executor/example_executor_qiskit.ipynb +0 -477
  101. squlearn-0.11.2/examples/integration/mlflow.ipynb +0 -259
  102. squlearn-0.11.2/examples/kernel/example_fidelity_kernel.ipynb +0 -184
  103. squlearn-0.11.2/examples/kernel/example_projected_kernel.ipynb +0 -1567
  104. squlearn-0.11.2/examples/kernel/example_qkode.ipynb +0 -1450
  105. squlearn-0.11.2/examples/kernel/example_regularization_mitigation.ipynb +0 -387
  106. squlearn-0.11.2/examples/kernel/qgpc_workflow.ipynb +0 -572
  107. squlearn-0.11.2/examples/kernel/qgpr_optimization_workflow.ipynb +0 -171
  108. squlearn-0.11.2/examples/kernel/qgpr_workflow.ipynb +0 -176
  109. squlearn-0.11.2/examples/qnn/classification_example.ipynb +0 -308
  110. squlearn-0.11.2/examples/qnn/example_adam.ipynb +0 -301
  111. squlearn-0.11.2/examples/qnn/example_minibatch.ipynb +0 -308
  112. squlearn-0.11.2/examples/qnn/example_qcnn_encoding_circuit.ipynb +0 -654
  113. squlearn-0.11.2/examples/qnn/multiclass_classification.ipynb +0 -316
  114. squlearn-0.11.2/examples/qnn/ode_example.ipynb +0 -353
  115. squlearn-0.11.2/examples/qnn/regression_example.ipynb +0 -374
  116. squlearn-0.11.2/examples/qnn/regression_with_variance.ipynb +0 -392
  117. squlearn-0.11.2/examples/qrc/qrc_classification.ipynb +0 -205
  118. squlearn-0.11.2/examples/qrc/qrc_regression.ipynb +0 -207
  119. squlearn-0.11.2/examples/tutorials/images/QK_ode_circ_workflow.png +0 -0
  120. squlearn-0.11.2/examples/tutorials/images/QNN_ode_workflow.png +0 -0
  121. squlearn-0.11.2/examples/tutorials/images/encoding_circuit.png +0 -0
  122. squlearn-0.11.2/examples/tutorials/images/pipeline.png +0 -0
  123. squlearn-0.11.2/examples/tutorials/images/projected_quantum_kernel.png +0 -0
  124. squlearn-0.11.2/examples/tutorials/images/quantum_bo.png +0 -0
  125. squlearn-0.11.2/examples/tutorials/kernel_digit_classification.ipynb +0 -1061
  126. squlearn-0.11.2/examples/tutorials/kernel_grid_search.ipynb +0 -894
  127. squlearn-0.11.2/examples/tutorials/kernel_regression.ipynb +0 -193
  128. squlearn-0.11.2/examples/tutorials/ode_solver.ipynb +0 -899
  129. squlearn-0.11.2/examples/tutorials/qnn_backend_mitigation.ipynb +0 -561
  130. squlearn-0.11.2/examples/tutorials/quantum_bayesian_optimization.ipynb +0 -528
  131. squlearn-0.11.2/install_lowest_dependencies.py +0 -68
  132. squlearn-0.11.2/output.png +0 -0
  133. squlearn-0.11.2/src/squlearn/qnn/lowlevel_qnn/lowlevel_qnn.py +0 -81
  134. squlearn-0.11.2/src/squlearn/qnn/lowlevel_qnn/lowlevel_qnn_base.py +0 -194
  135. squlearn-0.11.2/src/squlearn/qnn/lowlevel_qnn/lowlevel_qnn_pennylane.py +0 -614
  136. squlearn-0.11.2/src/squlearn/qnn/lowlevel_qnn/lowlevel_qnn_qiskit.py +0 -1185
  137. squlearn-0.11.2/src/squlearn/qnn/lowlevel_qnn/lowlevel_qnn_qulacs.py +0 -487
  138. squlearn-0.11.2/src/squlearn/util/data_preprocessing.py +0 -169
  139. squlearn-0.11.2/src/squlearn/util/decompose_to_std.py +0 -40
  140. squlearn-0.11.2/src/squlearn/util/optree/__init__.py +0 -28
  141. squlearn-0.11.2/src/squlearn/util/optree/optree.py +0 -925
  142. squlearn-0.11.2/src/squlearn/util/optree/optree_derivative.py +0 -515
  143. squlearn-0.11.2/src/squlearn/util/optree/optree_evaluate.py +0 -1779
  144. squlearn-0.11.2/src/squlearn/util/pennylane/__init__.py +0 -4
  145. squlearn-0.11.2/src/squlearn/util/pennylane/pennylane_circuit.py +0 -683
  146. squlearn-0.11.2/src/squlearn/util/pennylane/pennylane_gates.py +0 -105
  147. squlearn-0.11.2/src/squlearn/util/qulacs/__init__.py +0 -17
  148. squlearn-0.11.2/src/squlearn/util/qulacs/qulacs_circuit.py +0 -833
  149. squlearn-0.11.2/src/squlearn/util/qulacs/qulacs_execution.py +0 -220
  150. squlearn-0.11.2/src/squlearn/util/qulacs/qulacs_gates.py +0 -137
  151. squlearn-0.11.2/tests/encoding_circuit/circuit_library/test_chebyshev_pqc.py +0 -247
  152. squlearn-0.11.2/tests/encoding_circuit/circuit_library/test_chebyshev_rx.py +0 -218
  153. squlearn-0.11.2/tests/encoding_circuit/circuit_library/test_chebyshev_tower.py +0 -252
  154. squlearn-0.11.2/tests/encoding_circuit/circuit_library/test_high_dim_encoding_circuit.py +0 -209
  155. squlearn-0.11.2/tests/encoding_circuit/circuit_library/test_hubregtsen_encoding_circuit.py +0 -173
  156. squlearn-0.11.2/tests/encoding_circuit/circuit_library/test_kyriienko_encoding_circuit.py +0 -317
  157. squlearn-0.11.2/tests/encoding_circuit/circuit_library/test_multi_control_encoding_circuit.py +0 -180
  158. squlearn-0.11.2/tests/encoding_circuit/circuit_library/test_param_z_feature_map.py +0 -127
  159. squlearn-0.11.2/tests/encoding_circuit/circuit_library/test_qcnn_encoding_circuit.py +0 -168
  160. squlearn-0.11.2/tests/encoding_circuit/circuit_library/test_qiskit_encoding_circuit.py +0 -133
  161. squlearn-0.11.2/tests/encoding_circuit/circuit_library/test_random_encoding_circuit.py +0 -135
  162. squlearn-0.11.2/tests/encoding_circuit/circuit_library/test_random_layered_encoding_circuit.py +0 -143
  163. squlearn-0.11.2/tests/encoding_circuit/circuit_library/test_yz_cx_encoding_circuit.py +0 -148
  164. squlearn-0.11.2/tests/encoding_circuit/test_encoding_circuit_base.py +0 -111
  165. squlearn-0.11.2/tests/encoding_circuit/test_encoding_circuit_derivatives.py +0 -133
  166. squlearn-0.11.2/tests/encoding_circuit/test_layered_encoding_circuit.py +0 -329
  167. squlearn-0.11.2/tests/encoding_circuit/test_pruned_encoding_circuit.py +0 -119
  168. squlearn-0.11.2/tests/kernel/loss/test_ode_loss.py +0 -110
  169. squlearn-0.11.2/tests/kernel/lowlevel_kernel/test_fidelity_kernel.py +0 -292
  170. squlearn-0.11.2/tests/kernel/lowlevel_kernel/test_fidelity_kernel_expectation_value.py +0 -171
  171. squlearn-0.11.2/tests/kernel/lowlevel_kernel/test_fidelity_kernel_statevector.py +0 -358
  172. squlearn-0.11.2/tests/kernel/lowlevel_kernel/test_fidelity_quantum_kernel.py +0 -187
  173. squlearn-0.11.2/tests/kernel/lowlevel_kernel/test_kernel_optimizer.py +0 -94
  174. squlearn-0.11.2/tests/kernel/lowlevel_kernel/test_projected_quantum_kernel.py +0 -140
  175. squlearn-0.11.2/tests/kernel/ml/test_qkode.py +0 -106
  176. squlearn-0.11.2/tests/kernel/test_qgpc.py +0 -269
  177. squlearn-0.11.2/tests/kernel/test_qgpr.py +0 -281
  178. squlearn-0.11.2/tests/kernel/test_qkrr.py +0 -244
  179. squlearn-0.11.2/tests/kernel/test_qsvc.py +0 -271
  180. squlearn-0.11.2/tests/kernel/test_qsvr.py +0 -268
  181. squlearn-0.11.2/tests/observables/observable_implemented/test_custom_observable.py +0 -179
  182. squlearn-0.11.2/tests/observables/observable_implemented/test_ising_hamiltonian.py +0 -164
  183. squlearn-0.11.2/tests/observables/observable_implemented/test_single_pauli.py +0 -150
  184. squlearn-0.11.2/tests/observables/observable_implemented/test_single_probability.py +0 -88
  185. squlearn-0.11.2/tests/observables/observable_implemented/test_summed_paulis.py +0 -165
  186. squlearn-0.11.2/tests/observables/observable_implemented/test_summed_probability.py +0 -122
  187. squlearn-0.11.2/tests/observables/test_observable_base.py +0 -218
  188. squlearn-0.11.2/tests/optimizers/test_adam.py +0 -84
  189. squlearn-0.11.2/tests/optimizers/test_approximated_gradients.py +0 -103
  190. squlearn-0.11.2/tests/optimizers/test_optimizers_wrapper.py +0 -71
  191. squlearn-0.11.2/tests/optimizers/test_sglbo.py +0 -40
  192. squlearn-0.11.2/tests/qiskit_circuit_equivalence.py +0 -36
  193. squlearn-0.11.2/tests/qnn/loss/test_cross_entropy_loss.py +0 -56
  194. squlearn-0.11.2/tests/qnn/loss/test_mean_squared_error.py +0 -146
  195. squlearn-0.11.2/tests/qnn/loss/test_ode_loss.py +0 -235
  196. squlearn-0.11.2/tests/qnn/loss/test_parameter_regularization_loss.py +0 -148
  197. squlearn-0.11.2/tests/qnn/loss/test_squared_loss.py +0 -140
  198. squlearn-0.11.2/tests/qnn/loss/test_variance_loss.py +0 -122
  199. squlearn-0.11.2/tests/qnn/lowlevel_qnn/test_lowlevel_qnn.py +0 -90
  200. squlearn-0.11.2/tests/qnn/test_base_qnn.py +0 -205
  201. squlearn-0.11.2/tests/qnn/test_loss.py +0 -115
  202. squlearn-0.11.2/tests/qnn/test_qnnc.py +0 -310
  203. squlearn-0.11.2/tests/qnn/test_qnnr.py +0 -314
  204. squlearn-0.11.2/tests/qnn/test_training.py +0 -212
  205. squlearn-0.11.2/tests/qrc/test_base_qrc.py +0 -85
  206. squlearn-0.11.2/tests/qrc/test_qrc_classifier.py +0 -82
  207. squlearn-0.11.2/tests/qrc/test_qrc_regressor.py +0 -89
  208. squlearn-0.11.2/tests/util/execution/test_automatic_backend_selection.py +0 -173
  209. squlearn-0.11.2/tests/util/execution/test_parallel_primitives.py +0 -45
  210. squlearn-0.11.2/tests/util/optree/test_optree_derivative.py +0 -194
  211. squlearn-0.11.2/tests/util/optree/test_optree_evaluate.py +0 -356
  212. squlearn-0.11.2/tests/util/serialization/test_model_pickler.py +0 -86
  213. squlearn-0.11.2/tests/util/test_executor.py +0 -618
  214. squlearn-0.11.2/tests/util/test_pennylane_circuit.py +0 -164
  215. squlearn-0.11.2/tests/util/test_transpiler_target_aliases.py +0 -32
  216. {squlearn-0.11.2 → squlearn-0.12.0}/LICENSE.txt +0 -0
  217. {squlearn-0.11.2 → squlearn-0.12.0}/README.md +0 -0
  218. {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/encoding_circuit/__init__.py +0 -0
  219. {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/encoding_circuit/circuit_library/__init__.py +0 -0
  220. {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/kernel/__init__.py +0 -0
  221. {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/kernel/loss/__init__.py +0 -0
  222. {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/kernel/loss/kernel_loss_base.py +0 -0
  223. {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/kernel/loss/negative_log_likelihood.py +0 -0
  224. {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/kernel/loss/ode_loss.py +0 -0
  225. {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/kernel/loss/target_alignment.py +0 -0
  226. {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/kernel/lowlevel_kernel/__init__.py +0 -0
  227. {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/kernel/lowlevel_kernel/kernel_matrix_base.py +0 -0
  228. {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/kernel/lowlevel_kernel/kernel_optimizer.py +0 -0
  229. {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/kernel/lowlevel_kernel/kernel_util.py +0 -0
  230. {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/kernel/lowlevel_kernel/regularization.py +0 -0
  231. {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/kernel/qgpc.py +0 -0
  232. {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/kernel/qgpr.py +0 -0
  233. {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/kernel/qkode.py +0 -0
  234. {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/kernel/qkrr.py +0 -0
  235. {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/kernel/qsvc.py +0 -0
  236. {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/kernel/qsvr.py +0 -0
  237. {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/observables/__init__.py +0 -0
  238. {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/observables/observable_implemented/__init__.py +0 -0
  239. {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/optimizers/__init__.py +0 -0
  240. {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/optimizers/adam.py +0 -0
  241. {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/optimizers/approximated_gradients.py +0 -0
  242. {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/optimizers/optimizer_base.py +0 -0
  243. {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/optimizers/optimizers_wrapper.py +0 -0
  244. {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/optimizers/sglbo.py +0 -0
  245. {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/qnn/__init__.py +0 -0
  246. {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/qnn/loss/__init__.py +0 -0
  247. {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/qnn/loss/cross_entropy_loss.py +0 -0
  248. {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/qnn/loss/mean_squared_error.py +0 -0
  249. {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/qnn/loss/ode_loss.py +0 -0
  250. {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/qnn/loss/parameter_regularization_loss.py +0 -0
  251. {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/qnn/loss/qnn_loss_base.py +0 -0
  252. {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/qnn/loss/squared_loss.py +0 -0
  253. {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/qnn/loss/variance_loss.py +0 -0
  254. {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/qnn/lowlevel_qnn/__init__.py +0 -0
  255. {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/qnn/util/__init__.py +0 -0
  256. {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/qrc/__init__.py +0 -0
  257. {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/qrc/qrc_classifier.py +0 -0
  258. {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/qrc/qrc_regressor.py +0 -0
  259. {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/qrc/util/__init__.py +0 -0
  260. {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/qrc/util/random_pauli_list.py +0 -0
  261. {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/util/execution/__init__.py +0 -0
  262. {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/util/execution/automatic_backend_selection.py +0 -0
  263. {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/util/execution/hqaa/__init__.py +0 -0
  264. {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/util/execution/hqaa/heuristic.py +0 -0
  265. {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/util/execution/hqaa/parser.py +0 -0
  266. {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/util/execution/parallel_estimator.py +0 -0
  267. {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/util/execution/parallel_sampler.py +0 -0
  268. {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/util/serialization/__init__.py +0 -0
  269. {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/util/serialization/model_pickler.py +0 -0
  270. {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/util/serialization/serializable_model_mixin.py +0 -0
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.4
1
+ Metadata-Version: 2.5
2
2
  Name: squlearn
3
- Version: 0.11.2
3
+ Version: 0.12.0
4
4
  Summary: A library for quantum machine learning following the scikit-learn standard.
5
5
  Keywords: quantum,machine learning,qml
6
6
  Author-email: David Kreplin <david.kreplin@ipa.fraunhofer.de>, Moritz Willmann <moritz.willmann@ipa.fraunhofer.de>, Jan Schnabel <jan.schnabel@ipa.fraunhofer.de>, Frederic Rapp <frederic.rapp@ipa.fraunhofer.de>, Manuel Hagelüken <manuel.hagelueken@ipa.fraunhofer.de>, Marco Roth <marco.roth@ipa.fraunhofer.de>
@@ -15,20 +15,22 @@ Classifier: Programming Language :: Python :: 3.11
15
15
  Classifier: Programming Language :: Python :: 3.12
16
16
  Classifier: Programming Language :: Python :: 3.13
17
17
  License-File: LICENSE.txt
18
+ Requires-Dist: autograd<1.9
18
19
  Requires-Dist: bayesian-optimization>=1.4.3,<2
19
20
  Requires-Dist: dill>=0.3.5
20
- Requires-Dist: mapomatic>=0.12.0
21
+ Requires-Dist: mapomatic>=0.14.0
21
22
  Requires-Dist: networkx>=3.0
22
- Requires-Dist: numpy>=1.22
23
- Requires-Dist: pennylane>=0.34.0
24
- Requires-Dist: qiskit>=1.0.0,<3.0.0
25
- Requires-Dist: qiskit-aer>=0.14.0.1
26
- Requires-Dist: qiskit-algorithms>=0.3.0
27
- Requires-Dist: qiskit-ibm-runtime>=0.19.0
28
- Requires-Dist: qiskit-machine-learning>=0.7.0
29
- Requires-Dist: scipy>=1.8.0
30
- Requires-Dist: scikit-learn>=1.2.0
31
- Requires-Dist: sympy>=1.8
23
+ Requires-Dist: numpy>=2.0.0
24
+ Requires-Dist: pennylane>=0.42.0
25
+ Requires-Dist: qc-executor>=0.2.1
26
+ Requires-Dist: qiskit>=2.5.2,<3.0.0
27
+ Requires-Dist: qiskit-aer>=0.17.0
28
+ Requires-Dist: qiskit-algorithms>=0.4.0
29
+ Requires-Dist: qiskit-ibm-runtime>=0.37.0
30
+ Requires-Dist: qiskit-machine-learning>=0.9.0
31
+ Requires-Dist: scipy>=1.14.0
32
+ Requires-Dist: scikit-learn>=1.4.2
33
+ Requires-Dist: sympy>=1.12.1
32
34
  Requires-Dist: tqdm>=4.1.0
33
35
  Requires-Dist: qulacs>=0.6.0
34
36
  Requires-Dist: black[jupyter] ; extra == "dev"
@@ -61,6 +63,7 @@ Project-URL: github, https://github.com/sQUlearn/squlearn
61
63
  Provides-Extra: dev
62
64
  Provides-Extra: docs
63
65
  Provides-Extra: examples
66
+ Import-Name: squlearn
64
67
 
65
68
  <p align="center">
66
69
  <img alt="sQUlearn" src="https://raw.githubusercontent.com/sQUlearn/squlearn/main/docs/_static/logo.png" />
@@ -29,20 +29,22 @@ classifiers = [
29
29
  ]
30
30
  keywords = ["quantum", "machine learning", "qml"]
31
31
  dependencies = [
32
+ "autograd<1.9",
32
33
  "bayesian-optimization>=1.4.3,<2",
33
34
  "dill>=0.3.5",
34
- "mapomatic>=0.12.0",
35
+ "mapomatic>=0.14.0",
35
36
  "networkx>=3.0",
36
- "numpy>=1.22",
37
- "pennylane>=0.34.0",
38
- "qiskit>=1.0.0,<3.0.0",
39
- "qiskit-aer>=0.14.0.1",
40
- "qiskit-algorithms>=0.3.0",
41
- "qiskit-ibm-runtime>=0.19.0",
42
- "qiskit-machine-learning>=0.7.0",
43
- "scipy>=1.8.0",
44
- "scikit-learn>=1.2.0",
45
- "sympy>=1.8",
37
+ "numpy>=2.0.0",
38
+ "pennylane>=0.42.0",
39
+ "qc-executor>=0.2.1",
40
+ "qiskit>=2.5.2,<3.0.0",
41
+ "qiskit-aer>=0.17.0",
42
+ "qiskit-algorithms>=0.4.0",
43
+ "qiskit-ibm-runtime>=0.37.0",
44
+ "qiskit-machine-learning>=0.9.0",
45
+ "scipy>=1.14.0",
46
+ "scikit-learn>=1.4.2",
47
+ "sympy>=1.12.1",
46
48
  "tqdm>=4.1.0",
47
49
  "qulacs>=0.6.0",
48
50
  ]
@@ -3,7 +3,7 @@
3
3
  from .util import Executor
4
4
  from . import observables, encoding_circuit, kernel, optimizers, qnn, util
5
5
 
6
- __version__ = "0.11.2"
6
+ __version__ = "0.12.0"
7
7
 
8
8
  __all__ = [
9
9
  "Executor",
@@ -3,12 +3,12 @@ from __future__ import annotations
3
3
  import numpy as np
4
4
  from typing import Union
5
5
 
6
- from qiskit.circuit import ParameterVector
7
- from qiskit.circuit import QuantumCircuit
8
6
 
9
7
  from squlearn.util.data_preprocessing import extract_num_features
8
+ from squlearn.util.symbolic_math import arccos, arctan
10
9
 
11
10
  from ..encoding_circuit_base import EncodingCircuitBase
11
+ from qc_executor import QuantumCircuit, Parameters
12
12
 
13
13
 
14
14
  class ChebyshevPQC(EncodingCircuitBase):
@@ -269,16 +269,16 @@ class ChebyshevPQC(EncodingCircuitBase):
269
269
 
270
270
  def get_circuit(
271
271
  self,
272
- features: Union[ParameterVector, np.ndarray],
273
- parameters: Union[ParameterVector, np.ndarray],
272
+ features: Union[Parameters, np.ndarray],
273
+ parameters: Union[Parameters, np.ndarray],
274
274
  ) -> QuantumCircuit:
275
275
  """
276
276
  Returns the circuit of the ChebyshevPQC encoding circuit
277
277
 
278
278
  Args:
279
- features (Union[ParameterVector,np.ndarray]): Input vector of the features
279
+ features (Union[Parameters,np.ndarray]): Input vector of the features
280
280
  from which the gate inputs are obtained
281
- param_vec (Union[ParameterVector,np.ndarray]): Input vector of the parameters
281
+ param_vec (Union[Parameters,np.ndarray]): Input vector of the parameters
282
282
  from which the gate inputs are obtained
283
283
 
284
284
  Return:
@@ -289,13 +289,13 @@ class ChebyshevPQC(EncodingCircuitBase):
289
289
 
290
290
  def mapping(a, x):
291
291
  """Helper function for returning a*arccos(x)"""
292
- return a * np.arccos(x)
292
+ return a * arccos(x)
293
293
 
294
294
  elif self._nonlinearity == "arctan":
295
295
 
296
296
  def mapping(a, x):
297
297
  """Helper function for returning a*arctan(x)"""
298
- return a * np.arctan(x)
298
+ return a * arctan(x)
299
299
 
300
300
  num_features = extract_num_features(features)
301
301
  num_params = len(parameters)
@@ -315,33 +315,33 @@ class ChebyshevPQC(EncodingCircuitBase):
315
315
 
316
316
  # Basis change at the beginning
317
317
  for i in range(self.num_qubits):
318
- QC.ry(parameters[index_offset % num_params], i)
318
+ QC.ry(i, parameters[index_offset % num_params])
319
319
  index_offset += 1
320
320
 
321
321
  for _ in range(self._num_layers):
322
322
  # Chebyshev encoding circuit
323
323
  for i in range(self.num_qubits):
324
324
  QC.rx(
325
+ i,
325
326
  mapping(
326
327
  parameters[index_offset % num_params],
327
328
  features[feature_offset % num_features],
328
329
  ),
329
- i,
330
330
  )
331
331
  index_offset += 1
332
332
  feature_offset += 1
333
333
 
334
334
  for i in range(0, self.num_qubits + self._closed - 1, 2):
335
- egate(parameters[index_offset % num_params], i, (i + 1) % self.num_qubits)
335
+ egate(i, (i + 1) % self.num_qubits, parameters[index_offset % num_params])
336
336
  index_offset += 1
337
337
 
338
338
  if self.num_qubits > 2:
339
339
  for i in range(1, self.num_qubits + self._closed - 1, 2):
340
- egate(parameters[index_offset % num_params], i, (i + 1) % self.num_qubits)
340
+ egate(i, (i + 1) % self.num_qubits, parameters[index_offset % num_params])
341
341
  index_offset += 1
342
342
 
343
343
  for i in range(self.num_qubits):
344
- QC.ry(parameters[index_offset % num_params], i)
344
+ QC.ry(i, parameters[index_offset % num_params])
345
345
  index_offset += 1
346
346
 
347
347
  return QC
@@ -3,10 +3,10 @@ from __future__ import annotations
3
3
  import numpy as np
4
4
  from typing import Union
5
5
 
6
- from qiskit.circuit import ParameterVector
7
- from qiskit.circuit import QuantumCircuit
6
+ from qc_executor import QuantumCircuit, Parameters
8
7
 
9
8
  from squlearn.util.data_preprocessing import extract_num_features
9
+ from squlearn.util.symbolic_math import arccos, arctan
10
10
 
11
11
  from ..encoding_circuit_base import EncodingCircuitBase
12
12
 
@@ -202,16 +202,16 @@ class ChebyshevRx(EncodingCircuitBase):
202
202
 
203
203
  def get_circuit(
204
204
  self,
205
- features: Union[ParameterVector, np.ndarray],
206
- parameters: Union[ParameterVector, np.ndarray],
205
+ features: Union[Parameters, np.ndarray],
206
+ parameters: Union[Parameters, np.ndarray],
207
207
  ) -> QuantumCircuit:
208
208
  """
209
209
  Returns the circuit of the ChebyshevRx encoding circuit
210
210
 
211
211
  Args:
212
- features Union[ParameterVector,np.ndarray]: Input vector of the features
212
+ features Union[Parameters,np.ndarray]: Input vector of the features
213
213
  from which the gate inputs are obtained
214
- param_vec Union[ParameterVector,np.ndarray]: Input vector of the parameters
214
+ param_vec Union[Parameters,np.ndarray]: Input vector of the parameters
215
215
  from which the gate inputs are obtained
216
216
 
217
217
  Return:
@@ -237,13 +237,13 @@ class ChebyshevRx(EncodingCircuitBase):
237
237
 
238
238
  def mapping(a, x):
239
239
  """Helper function for returning a*arccos(x)"""
240
- return a * np.arccos(x)
240
+ return a * arccos(x)
241
241
 
242
242
  elif self._nonlinearity == "arctan":
243
243
 
244
244
  def mapping(a, x):
245
245
  """Helper function for returning a*arctan(x)"""
246
- return a * np.arctan(x)
246
+ return a * arctan(x)
247
247
 
248
248
  QC = QuantumCircuit(self.num_qubits)
249
249
  index_offset = 0
@@ -252,17 +252,17 @@ class ChebyshevRx(EncodingCircuitBase):
252
252
  # Chebyshev encoding circuit
253
253
  for i in range(self.num_qubits):
254
254
  QC.rx(
255
+ i,
255
256
  mapping(
256
257
  parameters[index_offset % num_params],
257
258
  features[feature_offset % num_features],
258
259
  ),
259
- i,
260
260
  )
261
261
  index_offset += 1
262
262
  feature_offset += 1
263
263
  # Trafo
264
264
  for i in range(self.num_qubits):
265
- QC.rx(parameters[index_offset % num_params], i)
265
+ QC.rx(i, parameters[index_offset % num_params])
266
266
  index_offset += 1
267
267
  QC = entangle_layer(QC)
268
268
 
@@ -3,10 +3,10 @@ from __future__ import annotations
3
3
  import numpy as np
4
4
  from typing import Union
5
5
 
6
- from qiskit.circuit import ParameterVector
7
- from qiskit.circuit import QuantumCircuit
6
+ from qc_executor import QuantumCircuit, Parameters
8
7
 
9
8
  from squlearn.util.data_preprocessing import extract_num_features
9
+ from squlearn.util.symbolic_math import arccos, arctan
10
10
 
11
11
  from ..encoding_circuit_base import EncodingCircuitBase
12
12
 
@@ -175,16 +175,16 @@ class ChebyshevTower(EncodingCircuitBase):
175
175
 
176
176
  def get_circuit(
177
177
  self,
178
- features: Union[ParameterVector, np.ndarray],
179
- parameters: Union[ParameterVector, np.ndarray] = None,
178
+ features: Union[Parameters, np.ndarray],
179
+ parameters: Union[Parameters, np.ndarray] = None,
180
180
  ) -> QuantumCircuit:
181
181
  """
182
182
  Generates and returns the circuit of the Chebyshev encoding circuit.
183
183
 
184
184
  Args:
185
- features (Union[ParameterVector,np.ndarray]): Input vector of the features
185
+ features (Union[Parameters,np.ndarray]): Input vector of the features
186
186
  from which the gate inputs are obtained
187
- param_vec (Union[ParameterVector,np.ndarray]): Input vector of the parameters
187
+ param_vec (Union[Parameters,np.ndarray]): Input vector of the parameters
188
188
  from which the gate inputs are obtained
189
189
 
190
190
  Return:
@@ -213,13 +213,13 @@ class ChebyshevTower(EncodingCircuitBase):
213
213
 
214
214
  def mapping(x, i):
215
215
  """Non-linear mapping for x: alpha*i*arccos(x)"""
216
- return self._alpha * i * np.arccos(x)
216
+ return self._alpha * i * arccos(x)
217
217
 
218
218
  elif self._nonlinearity == "arctan":
219
219
 
220
220
  def mapping(x, i):
221
221
  """Non-linear mapping for x: alpha*i*arctan(x)"""
222
- return self._alpha * i * np.arctan(x)
222
+ return self._alpha * i * arctan(x)
223
223
 
224
224
  QC = QuantumCircuit(self.num_qubits)
225
225
 
@@ -244,18 +244,18 @@ class ChebyshevTower(EncodingCircuitBase):
244
244
  for inner_ in range(inner):
245
245
  if self._rotation_gate.lower() == "rx":
246
246
  QC.rx(
247
- mapping(features[index_offset % num_features], icheb),
248
247
  iqubit % self.num_qubits,
248
+ mapping(features[index_offset % num_features], icheb),
249
249
  )
250
250
  elif self._rotation_gate.lower() == "ry":
251
251
  QC.ry(
252
- mapping(features[index_offset % num_features], icheb),
253
252
  iqubit % self.num_qubits,
253
+ mapping(features[index_offset % num_features], icheb),
254
254
  )
255
255
  elif self._rotation_gate.lower() == "rz":
256
256
  QC.rz(
257
- mapping(features[index_offset % num_features], icheb),
258
257
  iqubit % self.num_qubits,
258
+ mapping(features[index_offset % num_features], icheb),
259
259
  )
260
260
  else:
261
261
  raise ValueError(
@@ -1,7 +1,7 @@
1
- import numpy as np
2
1
  from typing import Union
3
- from qiskit.circuit import QuantumCircuit
4
- from qiskit.circuit import ParameterVector
2
+
3
+ import numpy as np
4
+ from qc_executor import Parameters, QuantumCircuit
5
5
 
6
6
  from squlearn.util.data_preprocessing import extract_num_features
7
7
 
@@ -79,8 +79,6 @@ class HighDimEncodingCircuit(EncodingCircuitBase):
79
79
  if self._entangling_gate not in ("cx", "iswap"):
80
80
  raise ValueError("Unknown entangling gate:", self._entangling_gate)
81
81
 
82
- self.siswap_gate = _build_siswap_gate()
83
-
84
82
  @property
85
83
  def cycling(self) -> bool:
86
84
  """Whether the assignment of gates cycles."""
@@ -147,16 +145,16 @@ class HighDimEncodingCircuit(EncodingCircuitBase):
147
145
 
148
146
  def get_circuit(
149
147
  self,
150
- features: Union[ParameterVector, np.ndarray],
151
- parameters: Union[ParameterVector, np.ndarray] = None,
148
+ features: Union[Parameters, np.ndarray],
149
+ parameters: Union[Parameters, np.ndarray] = None,
152
150
  ) -> QuantumCircuit:
153
151
  """
154
152
  Returns the circuit of the HighDim encoding circuit
155
153
 
156
154
  Args:
157
- features (Union[ParameterVector,np.ndarray]): Input vector of the features
155
+ features (Union[Parameters,np.ndarray]): Input vector of the features
158
156
  from which the gate inputs are obtained.
159
- param_vec (Union[ParameterVector,np.ndarray]): Input vector of the parameters
157
+ param_vec (Union[Parameters,np.ndarray]): Input vector of the parameters
160
158
  from which the gate inputs are obtained.
161
159
 
162
160
  Return:
@@ -176,7 +174,7 @@ class HighDimEncodingCircuit(EncodingCircuitBase):
176
174
  self._check_feature_encoding_slots(num_features, self.num_encoding_slots)
177
175
  self._check_feature_consistency(features)
178
176
 
179
- def build_layer(QC: QuantumCircuit, feature_vec: ParameterVector, index_offset: int):
177
+ def build_layer(QC: QuantumCircuit, feature_vec: Parameters, index_offset: int):
180
178
  """
181
179
  Private function which creates a single layer
182
180
  """
@@ -216,29 +214,33 @@ class HighDimEncodingCircuit(EncodingCircuitBase):
216
214
  # Create Rz and Ry gates
217
215
  if rows:
218
216
  if i % 3 == 0:
219
- QC.rz(feature_vec[ii], iqubit)
217
+ QC.rz(iqubit, feature_vec[ii])
220
218
  elif i % 3 == 1:
221
- QC.ry(feature_vec[ii], iqubit)
219
+ QC.ry(iqubit, feature_vec[ii])
222
220
  else: # i % 3 == 2
223
- QC.rz(feature_vec[ii], iqubit)
221
+ QC.rz(iqubit, feature_vec[ii])
224
222
  else:
225
223
  if int(i / self.num_qubits) == 0:
226
- QC.rz(feature_vec[ii], iqubit)
224
+ QC.rz(iqubit, feature_vec[ii])
227
225
  elif int(i / self.num_qubits) == 1:
228
- QC.ry(feature_vec[ii], iqubit)
226
+ QC.ry(iqubit, feature_vec[ii])
229
227
  else: # int(i/self.num_qubits) == 2
230
- QC.rz(feature_vec[ii], iqubit)
228
+ QC.rz(iqubit, feature_vec[ii])
231
229
 
232
230
  return QC
233
231
 
234
232
  def entangle_layer_siswap(QC: QuantumCircuit):
235
- """Createn of the entangeling layer by iSWAP neighboring qubits"""
233
+ """Creation of the entangling layer by iSWAP neighboring qubits
236
234
 
237
- # Build the layer
235
+ Implemented as RXX(-pi/4) followed by RYY(-pi/4), which is equivalent
236
+ to sqrt-iSWAP up to global phase. See verification below.
237
+ """
238
238
  for i in range(0, self.num_qubits - 1, 2):
239
- QC.append(self.siswap_gate, [i, i + 1])
239
+ QC.rxx(i, i + 1, -np.pi / 4)
240
+ QC.ryy(i, i + 1, -np.pi / 4)
240
241
  for i in range(1, self.num_qubits - 1, 2):
241
- QC.append(self.siswap_gate, [i, i + 1])
242
+ QC.rxx(i, i + 1, -np.pi / 4)
243
+ QC.ryy(i, i + 1, -np.pi / 4)
242
244
 
243
245
  return QC
244
246
 
@@ -284,14 +286,3 @@ class HighDimEncodingCircuit(EncodingCircuitBase):
284
286
  index_offset = 0
285
287
 
286
288
  return QC
287
-
288
-
289
- def _build_siswap_gate():
290
- """Manually build the square root iSWAP operator, since it is not available in Qiskit"""
291
- sqr_iswap = QuantumCircuit(2)
292
- sqr_iswap.cx(0, 1)
293
- sqr_iswap.cs(1, 0)
294
- sqr_iswap.ch(1, 0)
295
- sqr_iswap.cs(1, 0)
296
- sqr_iswap.cx(0, 1)
297
- return sqr_iswap.to_gate(label="siswap")
@@ -1,7 +1,6 @@
1
1
  import numpy as np
2
2
  from typing import Union
3
- from qiskit.circuit import QuantumCircuit
4
- from qiskit.circuit import ParameterVector
3
+ from qc_executor import QuantumCircuit, Parameters
5
4
 
6
5
  from squlearn.util.data_preprocessing import extract_num_features
7
6
 
@@ -127,16 +126,16 @@ class HubregtsenEncodingCircuit(EncodingCircuitBase):
127
126
 
128
127
  def get_circuit(
129
128
  self,
130
- features: Union[ParameterVector, np.ndarray],
131
- parameters: Union[ParameterVector, np.ndarray],
129
+ features: Union[Parameters, np.ndarray],
130
+ parameters: Union[Parameters, np.ndarray],
132
131
  ) -> QuantumCircuit:
133
132
  """
134
133
  Generates and returns the circuit of the Hubregtsen encoding circuit
135
134
 
136
135
  Args:
137
- features (Union[ParameterVector,np.ndarray]): Input vector of the features
136
+ features (Union[Parameters,np.ndarray]): Input vector of the features
138
137
  from which the gate inputs are obtained.
139
- param_vec (Union[ParameterVector,np.ndarray]): Input vector of the parameters
138
+ param_vec (Union[Parameters,np.ndarray]): Input vector of the parameters
140
139
  from which the gate inputs are obtained.
141
140
 
142
141
  Return:
@@ -158,13 +157,13 @@ class HubregtsenEncodingCircuit(EncodingCircuitBase):
158
157
  n_feature_loop = int(np.ceil(num_features / self.num_qubits))
159
158
  for i in range(n_feature_loop * self.num_qubits):
160
159
  if (i // self.num_qubits) % 2 == 0:
161
- QC.rz(features[i % num_features], i % self.num_qubits)
160
+ QC.rz(i % self.num_qubits, features[i % num_features])
162
161
  else:
163
- QC.rx(features[i % num_features], i % self.num_qubits)
162
+ QC.rx(i % self.num_qubits, features[i % num_features])
164
163
 
165
164
  # Single theta Ry gates
166
165
  for i in range(self.num_qubits):
167
- QC.ry(parameters[index_offset % num_params], i)
166
+ QC.ry(i, parameters[index_offset % num_params])
168
167
  index_offset += 1
169
168
 
170
169
  # Entangled theta CRZ gates
@@ -175,7 +174,7 @@ class HubregtsenEncodingCircuit(EncodingCircuitBase):
175
174
  istop = self.num_qubits - 1
176
175
 
177
176
  for i in range(istop):
178
- QC.crz(parameters[index_offset % num_params], i, (i + 1) % self.num_qubits)
177
+ QC.crz(i, (i + 1) % self.num_qubits, parameters[index_offset % num_params])
179
178
  index_offset += 1
180
179
 
181
180
  if self._final_encoding:
@@ -183,8 +182,8 @@ class HubregtsenEncodingCircuit(EncodingCircuitBase):
183
182
  n_feature_loop = int(np.ceil(num_features / self.num_qubits))
184
183
  for i in range(n_feature_loop * self.num_qubits):
185
184
  if int(np.ceil(i / self.num_qubits)) % 2 == 0:
186
- QC.rz(features[i % num_features], i % self.num_qubits)
185
+ QC.rz(i % self.num_qubits, features[i % num_features])
187
186
  else:
188
- QC.rx(features[i % num_features], i % self.num_qubits)
187
+ QC.rx(i % self.num_qubits, features[i % num_features])
189
188
 
190
189
  return QC
@@ -1,10 +1,9 @@
1
1
  import numpy as np
2
2
  from typing import Union
3
-
4
- from qiskit.circuit import ParameterVector
5
- from qiskit.circuit import QuantumCircuit
3
+ from qc_executor import QuantumCircuit, Parameters
6
4
 
7
5
  from squlearn.util.data_preprocessing import extract_num_features
6
+ from squlearn.util.symbolic_math import arccos
8
7
 
9
8
  from ..encoding_circuit_base import EncodingCircuitBase
10
9
  from ..layered_encoding_circuit import LayeredEncodingCircuit, Layer
@@ -177,15 +176,15 @@ class KyriienkoEncodingCircuit(EncodingCircuitBase):
177
176
 
178
177
  def get_circuit(
179
178
  self,
180
- features: Union[ParameterVector, np.ndarray],
181
- parameters: Union[ParameterVector, np.ndarray],
179
+ features: Union[Parameters, np.ndarray],
180
+ parameters: Union[Parameters, np.ndarray],
182
181
  ) -> QuantumCircuit:
183
182
  """
184
183
  Generates and returns the circuit of the KyriienkoEncodingCircuit
185
184
 
186
185
  Args:
187
- features (Union[ParameterVector, np.ndarray]): The features to encode
188
- parameters (Union[ParameterVector, np.ndarray]): The parameters of the encoding circuit
186
+ features (Union[Parameters, np.ndarray]): The features to encode
187
+ parameters (Union[Parameters, np.ndarray]): The parameters of the encoding circuit
189
188
 
190
189
  Returns:
191
190
  QuantumCircuit: The encoding circuit
@@ -196,7 +195,7 @@ class KyriienkoEncodingCircuit(EncodingCircuitBase):
196
195
 
197
196
  def mapping(x, i):
198
197
  """Non-linear mapping for x: alpha*i*arccos(x)"""
199
- return self.alpha * i * np.arccos(x)
198
+ return self.alpha * i * arccos(x)
200
199
 
201
200
  def variational_gate_block(
202
201
  QC,
@@ -216,9 +215,9 @@ class KyriienkoEncodingCircuit(EncodingCircuitBase):
216
215
  for i in range(qubit_starting_index, num_qubits):
217
216
  if i >= self.num_qubits:
218
217
  i -= self.num_qubits
219
- QC.rz(parameters[index_offset], i)
220
- QC.rx(parameters[index_offset + 1], i)
221
- QC.rz(parameters[index_offset + 2], i)
218
+ QC.rz(i, parameters[index_offset])
219
+ QC.rx(i, parameters[index_offset + 1])
220
+ QC.rz(i, parameters[index_offset + 2])
222
221
  index_offset += 3
223
222
  if variational_arrangement == "HEA":
224
223
  for start in (0, 1):
@@ -256,8 +255,8 @@ class KyriienkoEncodingCircuit(EncodingCircuitBase):
256
255
  for outer_ in range(outer):
257
256
  for inner_ in range(inner):
258
257
  {"rx": QC.rx, "ry": QC.ry, "rz": QC.rz}[self._rotation_gate](
259
- mapping(features[index_offset_encoding % num_features], icheb),
260
258
  iqubit % self.num_qubits,
259
+ mapping(features[index_offset_encoding % num_features], icheb),
261
260
  )
262
261
  iqubit += 1
263
262
  index_offset_encoding += 1
@@ -1,8 +1,7 @@
1
1
  import numpy as np
2
2
  from typing import Union
3
3
 
4
- from qiskit.circuit import ParameterVector
5
- from qiskit.circuit import QuantumCircuit
4
+ from qc_executor import QuantumCircuit, Parameters
6
5
 
7
6
  from squlearn.util.data_preprocessing import extract_num_features
8
7
 
@@ -105,16 +104,16 @@ class MultiControlEncodingCircuit(EncodingCircuitBase):
105
104
 
106
105
  def get_circuit(
107
106
  self,
108
- features: Union[ParameterVector, np.ndarray],
109
- parameters: Union[ParameterVector, np.ndarray],
107
+ features: Union[Parameters, np.ndarray],
108
+ parameters: Union[Parameters, np.ndarray],
110
109
  ) -> QuantumCircuit:
111
110
  """
112
111
  Returns the circuit of the MultiControlEncodingCircuit encoding circuit
113
112
 
114
113
  Args:
115
- features (Union[ParameterVector,np.ndarray]): Input vector of the features
114
+ features (Union[Parameters,np.ndarray]): Input vector of the features
116
115
  from which the gate inputs are obtained.
117
- param_vec (Union[ParameterVector,np.ndarray]): Input vector of the parameters
116
+ param_vec (Union[Parameters,np.ndarray]): Input vector of the parameters
118
117
  from which the gate inputs are obtained.
119
118
 
120
119
  Return:
@@ -137,7 +136,7 @@ class MultiControlEncodingCircuit(EncodingCircuitBase):
137
136
  # First ZZ-encoding circuit
138
137
  QC.h(range(self.num_qubits))
139
138
  for i in range(self.num_qubits):
140
- QC.rz(features[feature_offset % num_features], i)
139
+ QC.rz(i, features[feature_offset % num_features])
141
140
  feature_offset += 1
142
141
 
143
142
  if self._closed:
@@ -146,11 +145,11 @@ class MultiControlEncodingCircuit(EncodingCircuitBase):
146
145
  istop = self.num_qubits - 1
147
146
 
148
147
  for i in range(0, istop, 2):
149
- QC.crx(parameters[index_offset % num_params], i, (i + 1) % self.num_qubits)
148
+ QC.crx(i, (i + 1) % self.num_qubits, parameters[index_offset % num_params])
150
149
  index_offset += 1
151
- QC.cry(parameters[index_offset % num_params], i, (i + 1) % self.num_qubits)
150
+ QC.cry(i, (i + 1) % self.num_qubits, parameters[index_offset % num_params])
152
151
  index_offset += 1
153
- QC.crz(parameters[index_offset % num_params], i, (i + 1) % self.num_qubits)
152
+ QC.crz(i, (i + 1) % self.num_qubits, parameters[index_offset % num_params])
154
153
  index_offset += 1
155
154
 
156
155
  if self.num_qubits >= 2:
@@ -160,15 +159,15 @@ class MultiControlEncodingCircuit(EncodingCircuitBase):
160
159
  istop = self.num_qubits - 1
161
160
 
162
161
  for i in range(1, istop, 2):
163
- QC.crx(parameters[index_offset % num_params], i, (i + 1) % self.num_qubits)
162
+ QC.crx(i, (i + 1) % self.num_qubits, parameters[index_offset % num_params])
164
163
  index_offset += 1
165
- QC.cry(parameters[index_offset % num_params], i, (i + 1) % self.num_qubits)
164
+ QC.cry(i, (i + 1) % self.num_qubits, parameters[index_offset % num_params])
166
165
  index_offset += 1
167
- QC.crz(parameters[index_offset % num_params], i, (i + 1) % self.num_qubits)
166
+ QC.crz(i, (i + 1) % self.num_qubits, parameters[index_offset % num_params])
168
167
  index_offset += 1
169
168
 
170
169
  if self._final_encoding:
171
170
  for i in range(self.num_qubits):
172
- QC.rz(features[feature_offset % num_features], i)
171
+ QC.rz(i, features[feature_offset % num_features])
173
172
  feature_offset += 1
174
173
  return QC