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.
- {squlearn-0.11.2 → squlearn-0.12.0}/PKG-INFO +16 -13
- {squlearn-0.11.2 → squlearn-0.12.0}/pyproject.toml +13 -11
- {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/__init__.py +1 -1
- {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/encoding_circuit/circuit_library/chebyshev_pqc.py +13 -13
- {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/encoding_circuit/circuit_library/chebyshev_rx.py +10 -10
- {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/encoding_circuit/circuit_library/chebyshev_tower.py +11 -11
- {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/encoding_circuit/circuit_library/highdim_encoding_circuit.py +22 -31
- {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/encoding_circuit/circuit_library/hubregtsen_encoding_circuit.py +11 -12
- {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/encoding_circuit/circuit_library/kyriienko_nonlinear_encoding_circuit.py +11 -12
- {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/encoding_circuit/circuit_library/multi_control_encoding_circuit.py +13 -14
- {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/encoding_circuit/circuit_library/param_z_feature_map.py +6 -7
- {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/encoding_circuit/circuit_library/qcnn_encoding_circuit.py +69 -63
- {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/encoding_circuit/circuit_library/qiskit_encoding_circuit.py +14 -10
- {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/encoding_circuit/circuit_library/random_encoding_circuit.py +44 -70
- {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/encoding_circuit/circuit_library/random_layered_encoding_circuit.py +5 -5
- {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/encoding_circuit/circuit_library/yz_cx_encoding_circuit.py +7 -8
- {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/encoding_circuit/encoding_circuit_base.py +24 -22
- {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/encoding_circuit/encoding_circuit_derivatives.py +29 -16
- {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/encoding_circuit/layered_encoding_circuit.py +264 -208
- {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/encoding_circuit/pruned_encoding_circuit.py +38 -53
- {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/encoding_circuit/transpiled_encoding_circuit.py +31 -20
- {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/kernel/lowlevel_kernel/fidelity_kernel.py +31 -9
- {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/kernel/lowlevel_kernel/fidelity_kernel_expectation_value.py +2 -7
- {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/kernel/lowlevel_kernel/fidelity_kernel_statevector.py +47 -89
- {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/kernel/lowlevel_kernel/projected_quantum_kernel.py +9 -13
- {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/observables/observable_base.py +41 -58
- {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/observables/observable_derivatives.py +31 -20
- {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/observables/observable_implemented/custom_observable.py +10 -11
- {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/observables/observable_implemented/ising_hamiltonian.py +9 -10
- {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/observables/observable_implemented/single_pauli.py +7 -8
- {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/observables/observable_implemented/single_probability.py +8 -9
- {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/observables/observable_implemented/summed_paulis.py +7 -8
- {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/observables/observable_implemented/summed_probabilities.py +10 -10
- {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/qnn/base_qnn.py +4 -14
- {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/qnn/lowlevel_qnn/evaluation_classes.py +17 -17
- squlearn-0.12.0/src/squlearn/qnn/lowlevel_qnn/lowlevel_qnn.py +1001 -0
- {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/qnn/qnnc.py +0 -5
- {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/qnn/qnnr.py +0 -6
- {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/qnn/util/barren_plateau_analysis.py +3 -3
- {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/qnn/util/training.py +5 -5
- {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/qrc/base_qrc.py +7 -3
- {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/util/__init__.py +1 -1
- squlearn-0.12.0/src/squlearn/util/circuit_utils.py +36 -0
- squlearn-0.12.0/src/squlearn/util/data_preprocessing.py +36 -0
- {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/util/executor.py +343 -1179
- squlearn-0.12.0/src/squlearn/util/operator_utils.py +69 -0
- {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/util/qfi.py +12 -14
- squlearn-0.12.0/src/squlearn/util/symbolic_math.py +64 -0
- squlearn-0.11.2/.github/CODE_OF_CONDUCT.md +0 -134
- squlearn-0.11.2/.github/CONTRIBUTING.md +0 -48
- squlearn-0.11.2/.github/ISSUE_TEMPLATE/bug_report.md +0 -24
- squlearn-0.11.2/.github/ISSUE_TEMPLATE/feature_request.md +0 -20
- squlearn-0.11.2/.github/workflows/doc_checks.yml +0 -26
- squlearn-0.11.2/.github/workflows/elaborate_tests.yaml +0 -165
- squlearn-0.11.2/.github/workflows/format.yml +0 -31
- squlearn-0.11.2/.github/workflows/publish.yml +0 -30
- squlearn-0.11.2/.github/workflows/publish_docs.yml +0 -48
- squlearn-0.11.2/.github/workflows/quick_tests.yaml +0 -45
- squlearn-0.11.2/.github/workflows/stale.yml +0 -20
- squlearn-0.11.2/.gitignore +0 -176
- squlearn-0.11.2/CITATION.cff +0 -45
- squlearn-0.11.2/docs/Makefile +0 -20
- squlearn-0.11.2/docs/README.md +0 -23
- squlearn-0.11.2/docs/_static/css/custom.css +0 -106
- squlearn-0.11.2/docs/_static/favicon.png +0 -0
- squlearn-0.11.2/docs/_static/logo.png +0 -0
- squlearn-0.11.2/docs/_static/qkm/QKM_scheme_pic.jpg +0 -0
- squlearn-0.11.2/docs/_static/qnn/qnn.svg +0 -272
- squlearn-0.11.2/docs/_static/qrc/QRC_user_guide.png +0 -0
- squlearn-0.11.2/docs/_static/qrc/qrc_classification_transparent.png +0 -0
- squlearn-0.11.2/docs/_static/qrc/qrc_regression_transparent.png +0 -0
- squlearn-0.11.2/docs/_static/schematic.png +0 -0
- squlearn-0.11.2/docs/_static/util/executor.png +0 -0
- squlearn-0.11.2/docs/_templates/class.rst +0 -6
- squlearn-0.11.2/docs/_templates/class_with_call.rst +0 -19
- squlearn-0.11.2/docs/_templates/function.rst +0 -7
- squlearn-0.11.2/docs/conf.py +0 -123
- squlearn-0.11.2/docs/examples/example_kernel_digit_classification.nblink +0 -6
- squlearn-0.11.2/docs/examples/example_kernel_grid_search.nblink +0 -3
- squlearn-0.11.2/docs/examples/example_ode_solver.nblink +0 -6
- squlearn-0.11.2/docs/examples/example_qnn_backend_mitigation.nblink +0 -6
- squlearn-0.11.2/docs/examples/example_quantum_bayesian_optimization.nblink +0 -6
- squlearn-0.11.2/docs/examples/examples_index.rst +0 -14
- squlearn-0.11.2/docs/index.rst +0 -20
- squlearn-0.11.2/docs/install/install.rst +0 -83
- squlearn-0.11.2/docs/make.bat +0 -46
- squlearn-0.11.2/docs/modules/classes.rst +0 -322
- squlearn-0.11.2/docs/qiskit_settings.conf +0 -3
- squlearn-0.11.2/docs/spelling_wordlist.txt +0 -56
- squlearn-0.11.2/docs/user_guide/encoding_circuits.rst +0 -222
- squlearn-0.11.2/docs/user_guide/executor.rst +0 -566
- squlearn-0.11.2/docs/user_guide/kernel_methods.rst +0 -290
- squlearn-0.11.2/docs/user_guide/observables.rst +0 -172
- squlearn-0.11.2/docs/user_guide/quantum_neural_networks.rst +0 -460
- squlearn-0.11.2/docs/user_guide/quantum_reservoir_computing.rst +0 -264
- squlearn-0.11.2/docs/user_guide/user_guide_index.rst +0 -14
- squlearn-0.11.2/examples/encoding_circuits/layered_encoding_circuit.ipynb +0 -179
- squlearn-0.11.2/examples/encoding_circuits/pruning_example.ipynb +0 -248
- squlearn-0.11.2/examples/encoding_circuits/various_encoding_circuit.ipynb +0 -282
- squlearn-0.11.2/examples/executor/example_executor_qiskit.ipynb +0 -477
- squlearn-0.11.2/examples/integration/mlflow.ipynb +0 -259
- squlearn-0.11.2/examples/kernel/example_fidelity_kernel.ipynb +0 -184
- squlearn-0.11.2/examples/kernel/example_projected_kernel.ipynb +0 -1567
- squlearn-0.11.2/examples/kernel/example_qkode.ipynb +0 -1450
- squlearn-0.11.2/examples/kernel/example_regularization_mitigation.ipynb +0 -387
- squlearn-0.11.2/examples/kernel/qgpc_workflow.ipynb +0 -572
- squlearn-0.11.2/examples/kernel/qgpr_optimization_workflow.ipynb +0 -171
- squlearn-0.11.2/examples/kernel/qgpr_workflow.ipynb +0 -176
- squlearn-0.11.2/examples/qnn/classification_example.ipynb +0 -308
- squlearn-0.11.2/examples/qnn/example_adam.ipynb +0 -301
- squlearn-0.11.2/examples/qnn/example_minibatch.ipynb +0 -308
- squlearn-0.11.2/examples/qnn/example_qcnn_encoding_circuit.ipynb +0 -654
- squlearn-0.11.2/examples/qnn/multiclass_classification.ipynb +0 -316
- squlearn-0.11.2/examples/qnn/ode_example.ipynb +0 -353
- squlearn-0.11.2/examples/qnn/regression_example.ipynb +0 -374
- squlearn-0.11.2/examples/qnn/regression_with_variance.ipynb +0 -392
- squlearn-0.11.2/examples/qrc/qrc_classification.ipynb +0 -205
- squlearn-0.11.2/examples/qrc/qrc_regression.ipynb +0 -207
- squlearn-0.11.2/examples/tutorials/images/QK_ode_circ_workflow.png +0 -0
- squlearn-0.11.2/examples/tutorials/images/QNN_ode_workflow.png +0 -0
- squlearn-0.11.2/examples/tutorials/images/encoding_circuit.png +0 -0
- squlearn-0.11.2/examples/tutorials/images/pipeline.png +0 -0
- squlearn-0.11.2/examples/tutorials/images/projected_quantum_kernel.png +0 -0
- squlearn-0.11.2/examples/tutorials/images/quantum_bo.png +0 -0
- squlearn-0.11.2/examples/tutorials/kernel_digit_classification.ipynb +0 -1061
- squlearn-0.11.2/examples/tutorials/kernel_grid_search.ipynb +0 -894
- squlearn-0.11.2/examples/tutorials/kernel_regression.ipynb +0 -193
- squlearn-0.11.2/examples/tutorials/ode_solver.ipynb +0 -899
- squlearn-0.11.2/examples/tutorials/qnn_backend_mitigation.ipynb +0 -561
- squlearn-0.11.2/examples/tutorials/quantum_bayesian_optimization.ipynb +0 -528
- squlearn-0.11.2/install_lowest_dependencies.py +0 -68
- squlearn-0.11.2/output.png +0 -0
- squlearn-0.11.2/src/squlearn/qnn/lowlevel_qnn/lowlevel_qnn.py +0 -81
- squlearn-0.11.2/src/squlearn/qnn/lowlevel_qnn/lowlevel_qnn_base.py +0 -194
- squlearn-0.11.2/src/squlearn/qnn/lowlevel_qnn/lowlevel_qnn_pennylane.py +0 -614
- squlearn-0.11.2/src/squlearn/qnn/lowlevel_qnn/lowlevel_qnn_qiskit.py +0 -1185
- squlearn-0.11.2/src/squlearn/qnn/lowlevel_qnn/lowlevel_qnn_qulacs.py +0 -487
- squlearn-0.11.2/src/squlearn/util/data_preprocessing.py +0 -169
- squlearn-0.11.2/src/squlearn/util/decompose_to_std.py +0 -40
- squlearn-0.11.2/src/squlearn/util/optree/__init__.py +0 -28
- squlearn-0.11.2/src/squlearn/util/optree/optree.py +0 -925
- squlearn-0.11.2/src/squlearn/util/optree/optree_derivative.py +0 -515
- squlearn-0.11.2/src/squlearn/util/optree/optree_evaluate.py +0 -1779
- squlearn-0.11.2/src/squlearn/util/pennylane/__init__.py +0 -4
- squlearn-0.11.2/src/squlearn/util/pennylane/pennylane_circuit.py +0 -683
- squlearn-0.11.2/src/squlearn/util/pennylane/pennylane_gates.py +0 -105
- squlearn-0.11.2/src/squlearn/util/qulacs/__init__.py +0 -17
- squlearn-0.11.2/src/squlearn/util/qulacs/qulacs_circuit.py +0 -833
- squlearn-0.11.2/src/squlearn/util/qulacs/qulacs_execution.py +0 -220
- squlearn-0.11.2/src/squlearn/util/qulacs/qulacs_gates.py +0 -137
- squlearn-0.11.2/tests/encoding_circuit/circuit_library/test_chebyshev_pqc.py +0 -247
- squlearn-0.11.2/tests/encoding_circuit/circuit_library/test_chebyshev_rx.py +0 -218
- squlearn-0.11.2/tests/encoding_circuit/circuit_library/test_chebyshev_tower.py +0 -252
- squlearn-0.11.2/tests/encoding_circuit/circuit_library/test_high_dim_encoding_circuit.py +0 -209
- squlearn-0.11.2/tests/encoding_circuit/circuit_library/test_hubregtsen_encoding_circuit.py +0 -173
- squlearn-0.11.2/tests/encoding_circuit/circuit_library/test_kyriienko_encoding_circuit.py +0 -317
- squlearn-0.11.2/tests/encoding_circuit/circuit_library/test_multi_control_encoding_circuit.py +0 -180
- squlearn-0.11.2/tests/encoding_circuit/circuit_library/test_param_z_feature_map.py +0 -127
- squlearn-0.11.2/tests/encoding_circuit/circuit_library/test_qcnn_encoding_circuit.py +0 -168
- squlearn-0.11.2/tests/encoding_circuit/circuit_library/test_qiskit_encoding_circuit.py +0 -133
- squlearn-0.11.2/tests/encoding_circuit/circuit_library/test_random_encoding_circuit.py +0 -135
- squlearn-0.11.2/tests/encoding_circuit/circuit_library/test_random_layered_encoding_circuit.py +0 -143
- squlearn-0.11.2/tests/encoding_circuit/circuit_library/test_yz_cx_encoding_circuit.py +0 -148
- squlearn-0.11.2/tests/encoding_circuit/test_encoding_circuit_base.py +0 -111
- squlearn-0.11.2/tests/encoding_circuit/test_encoding_circuit_derivatives.py +0 -133
- squlearn-0.11.2/tests/encoding_circuit/test_layered_encoding_circuit.py +0 -329
- squlearn-0.11.2/tests/encoding_circuit/test_pruned_encoding_circuit.py +0 -119
- squlearn-0.11.2/tests/kernel/loss/test_ode_loss.py +0 -110
- squlearn-0.11.2/tests/kernel/lowlevel_kernel/test_fidelity_kernel.py +0 -292
- squlearn-0.11.2/tests/kernel/lowlevel_kernel/test_fidelity_kernel_expectation_value.py +0 -171
- squlearn-0.11.2/tests/kernel/lowlevel_kernel/test_fidelity_kernel_statevector.py +0 -358
- squlearn-0.11.2/tests/kernel/lowlevel_kernel/test_fidelity_quantum_kernel.py +0 -187
- squlearn-0.11.2/tests/kernel/lowlevel_kernel/test_kernel_optimizer.py +0 -94
- squlearn-0.11.2/tests/kernel/lowlevel_kernel/test_projected_quantum_kernel.py +0 -140
- squlearn-0.11.2/tests/kernel/ml/test_qkode.py +0 -106
- squlearn-0.11.2/tests/kernel/test_qgpc.py +0 -269
- squlearn-0.11.2/tests/kernel/test_qgpr.py +0 -281
- squlearn-0.11.2/tests/kernel/test_qkrr.py +0 -244
- squlearn-0.11.2/tests/kernel/test_qsvc.py +0 -271
- squlearn-0.11.2/tests/kernel/test_qsvr.py +0 -268
- squlearn-0.11.2/tests/observables/observable_implemented/test_custom_observable.py +0 -179
- squlearn-0.11.2/tests/observables/observable_implemented/test_ising_hamiltonian.py +0 -164
- squlearn-0.11.2/tests/observables/observable_implemented/test_single_pauli.py +0 -150
- squlearn-0.11.2/tests/observables/observable_implemented/test_single_probability.py +0 -88
- squlearn-0.11.2/tests/observables/observable_implemented/test_summed_paulis.py +0 -165
- squlearn-0.11.2/tests/observables/observable_implemented/test_summed_probability.py +0 -122
- squlearn-0.11.2/tests/observables/test_observable_base.py +0 -218
- squlearn-0.11.2/tests/optimizers/test_adam.py +0 -84
- squlearn-0.11.2/tests/optimizers/test_approximated_gradients.py +0 -103
- squlearn-0.11.2/tests/optimizers/test_optimizers_wrapper.py +0 -71
- squlearn-0.11.2/tests/optimizers/test_sglbo.py +0 -40
- squlearn-0.11.2/tests/qiskit_circuit_equivalence.py +0 -36
- squlearn-0.11.2/tests/qnn/loss/test_cross_entropy_loss.py +0 -56
- squlearn-0.11.2/tests/qnn/loss/test_mean_squared_error.py +0 -146
- squlearn-0.11.2/tests/qnn/loss/test_ode_loss.py +0 -235
- squlearn-0.11.2/tests/qnn/loss/test_parameter_regularization_loss.py +0 -148
- squlearn-0.11.2/tests/qnn/loss/test_squared_loss.py +0 -140
- squlearn-0.11.2/tests/qnn/loss/test_variance_loss.py +0 -122
- squlearn-0.11.2/tests/qnn/lowlevel_qnn/test_lowlevel_qnn.py +0 -90
- squlearn-0.11.2/tests/qnn/test_base_qnn.py +0 -205
- squlearn-0.11.2/tests/qnn/test_loss.py +0 -115
- squlearn-0.11.2/tests/qnn/test_qnnc.py +0 -310
- squlearn-0.11.2/tests/qnn/test_qnnr.py +0 -314
- squlearn-0.11.2/tests/qnn/test_training.py +0 -212
- squlearn-0.11.2/tests/qrc/test_base_qrc.py +0 -85
- squlearn-0.11.2/tests/qrc/test_qrc_classifier.py +0 -82
- squlearn-0.11.2/tests/qrc/test_qrc_regressor.py +0 -89
- squlearn-0.11.2/tests/util/execution/test_automatic_backend_selection.py +0 -173
- squlearn-0.11.2/tests/util/execution/test_parallel_primitives.py +0 -45
- squlearn-0.11.2/tests/util/optree/test_optree_derivative.py +0 -194
- squlearn-0.11.2/tests/util/optree/test_optree_evaluate.py +0 -356
- squlearn-0.11.2/tests/util/serialization/test_model_pickler.py +0 -86
- squlearn-0.11.2/tests/util/test_executor.py +0 -618
- squlearn-0.11.2/tests/util/test_pennylane_circuit.py +0 -164
- squlearn-0.11.2/tests/util/test_transpiler_target_aliases.py +0 -32
- {squlearn-0.11.2 → squlearn-0.12.0}/LICENSE.txt +0 -0
- {squlearn-0.11.2 → squlearn-0.12.0}/README.md +0 -0
- {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/encoding_circuit/__init__.py +0 -0
- {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/encoding_circuit/circuit_library/__init__.py +0 -0
- {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/kernel/__init__.py +0 -0
- {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/kernel/loss/__init__.py +0 -0
- {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/kernel/loss/kernel_loss_base.py +0 -0
- {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/kernel/loss/negative_log_likelihood.py +0 -0
- {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/kernel/loss/ode_loss.py +0 -0
- {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/kernel/loss/target_alignment.py +0 -0
- {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/kernel/lowlevel_kernel/__init__.py +0 -0
- {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/kernel/lowlevel_kernel/kernel_matrix_base.py +0 -0
- {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/kernel/lowlevel_kernel/kernel_optimizer.py +0 -0
- {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/kernel/lowlevel_kernel/kernel_util.py +0 -0
- {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/kernel/lowlevel_kernel/regularization.py +0 -0
- {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/kernel/qgpc.py +0 -0
- {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/kernel/qgpr.py +0 -0
- {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/kernel/qkode.py +0 -0
- {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/kernel/qkrr.py +0 -0
- {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/kernel/qsvc.py +0 -0
- {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/kernel/qsvr.py +0 -0
- {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/observables/__init__.py +0 -0
- {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/observables/observable_implemented/__init__.py +0 -0
- {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/optimizers/__init__.py +0 -0
- {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/optimizers/adam.py +0 -0
- {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/optimizers/approximated_gradients.py +0 -0
- {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/optimizers/optimizer_base.py +0 -0
- {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/optimizers/optimizers_wrapper.py +0 -0
- {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/optimizers/sglbo.py +0 -0
- {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/qnn/__init__.py +0 -0
- {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/qnn/loss/__init__.py +0 -0
- {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/qnn/loss/cross_entropy_loss.py +0 -0
- {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/qnn/loss/mean_squared_error.py +0 -0
- {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/qnn/loss/ode_loss.py +0 -0
- {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/qnn/loss/parameter_regularization_loss.py +0 -0
- {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/qnn/loss/qnn_loss_base.py +0 -0
- {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/qnn/loss/squared_loss.py +0 -0
- {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/qnn/loss/variance_loss.py +0 -0
- {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/qnn/lowlevel_qnn/__init__.py +0 -0
- {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/qnn/util/__init__.py +0 -0
- {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/qrc/__init__.py +0 -0
- {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/qrc/qrc_classifier.py +0 -0
- {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/qrc/qrc_regressor.py +0 -0
- {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/qrc/util/__init__.py +0 -0
- {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/qrc/util/random_pauli_list.py +0 -0
- {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/util/execution/__init__.py +0 -0
- {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/util/execution/automatic_backend_selection.py +0 -0
- {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/util/execution/hqaa/__init__.py +0 -0
- {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/util/execution/hqaa/heuristic.py +0 -0
- {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/util/execution/hqaa/parser.py +0 -0
- {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/util/execution/parallel_estimator.py +0 -0
- {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/util/execution/parallel_sampler.py +0 -0
- {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/util/serialization/__init__.py +0 -0
- {squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/util/serialization/model_pickler.py +0 -0
- {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.
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
2
|
Name: squlearn
|
|
3
|
-
Version: 0.
|
|
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.
|
|
21
|
+
Requires-Dist: mapomatic>=0.14.0
|
|
21
22
|
Requires-Dist: networkx>=3.0
|
|
22
|
-
Requires-Dist: numpy>=
|
|
23
|
-
Requires-Dist: pennylane>=0.
|
|
24
|
-
Requires-Dist:
|
|
25
|
-
Requires-Dist: qiskit
|
|
26
|
-
Requires-Dist: qiskit-
|
|
27
|
-
Requires-Dist: qiskit-
|
|
28
|
-
Requires-Dist: qiskit-
|
|
29
|
-
Requires-Dist:
|
|
30
|
-
Requires-Dist:
|
|
31
|
-
Requires-Dist:
|
|
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.
|
|
35
|
+
"mapomatic>=0.14.0",
|
|
35
36
|
"networkx>=3.0",
|
|
36
|
-
"numpy>=
|
|
37
|
-
"pennylane>=0.
|
|
38
|
-
"
|
|
39
|
-
"qiskit
|
|
40
|
-
"qiskit-
|
|
41
|
-
"qiskit-
|
|
42
|
-
"qiskit-
|
|
43
|
-
"
|
|
44
|
-
"
|
|
45
|
-
"
|
|
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
|
]
|
{squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/encoding_circuit/circuit_library/chebyshev_pqc.py
RENAMED
|
@@ -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[
|
|
273
|
-
parameters: Union[
|
|
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[
|
|
279
|
+
features (Union[Parameters,np.ndarray]): Input vector of the features
|
|
280
280
|
from which the gate inputs are obtained
|
|
281
|
-
param_vec (Union[
|
|
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 *
|
|
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 *
|
|
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]
|
|
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(
|
|
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(
|
|
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]
|
|
344
|
+
QC.ry(i, parameters[index_offset % num_params])
|
|
345
345
|
index_offset += 1
|
|
346
346
|
|
|
347
347
|
return QC
|
{squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/encoding_circuit/circuit_library/chebyshev_rx.py
RENAMED
|
@@ -3,10 +3,10 @@ from __future__ import annotations
|
|
|
3
3
|
import numpy as np
|
|
4
4
|
from typing import Union
|
|
5
5
|
|
|
6
|
-
from
|
|
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[
|
|
206
|
-
parameters: Union[
|
|
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[
|
|
212
|
+
features Union[Parameters,np.ndarray]: Input vector of the features
|
|
213
213
|
from which the gate inputs are obtained
|
|
214
|
-
param_vec Union[
|
|
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 *
|
|
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 *
|
|
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]
|
|
265
|
+
QC.rx(i, parameters[index_offset % num_params])
|
|
266
266
|
index_offset += 1
|
|
267
267
|
QC = entangle_layer(QC)
|
|
268
268
|
|
{squlearn-0.11.2 → squlearn-0.12.0}/src/squlearn/encoding_circuit/circuit_library/chebyshev_tower.py
RENAMED
|
@@ -3,10 +3,10 @@ from __future__ import annotations
|
|
|
3
3
|
import numpy as np
|
|
4
4
|
from typing import Union
|
|
5
5
|
|
|
6
|
-
from
|
|
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[
|
|
179
|
-
parameters: Union[
|
|
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[
|
|
185
|
+
features (Union[Parameters,np.ndarray]): Input vector of the features
|
|
186
186
|
from which the gate inputs are obtained
|
|
187
|
-
param_vec (Union[
|
|
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 *
|
|
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 *
|
|
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
|
-
|
|
4
|
-
|
|
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[
|
|
151
|
-
parameters: Union[
|
|
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[
|
|
155
|
+
features (Union[Parameters,np.ndarray]): Input vector of the features
|
|
158
156
|
from which the gate inputs are obtained.
|
|
159
|
-
param_vec (Union[
|
|
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:
|
|
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]
|
|
217
|
+
QC.rz(iqubit, feature_vec[ii])
|
|
220
218
|
elif i % 3 == 1:
|
|
221
|
-
QC.ry(feature_vec[ii]
|
|
219
|
+
QC.ry(iqubit, feature_vec[ii])
|
|
222
220
|
else: # i % 3 == 2
|
|
223
|
-
QC.rz(feature_vec[ii]
|
|
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]
|
|
224
|
+
QC.rz(iqubit, feature_vec[ii])
|
|
227
225
|
elif int(i / self.num_qubits) == 1:
|
|
228
|
-
QC.ry(feature_vec[ii]
|
|
226
|
+
QC.ry(iqubit, feature_vec[ii])
|
|
229
227
|
else: # int(i/self.num_qubits) == 2
|
|
230
|
-
QC.rz(feature_vec[ii]
|
|
228
|
+
QC.rz(iqubit, feature_vec[ii])
|
|
231
229
|
|
|
232
230
|
return QC
|
|
233
231
|
|
|
234
232
|
def entangle_layer_siswap(QC: QuantumCircuit):
|
|
235
|
-
"""
|
|
233
|
+
"""Creation of the entangling layer by iSWAP neighboring qubits
|
|
236
234
|
|
|
237
|
-
|
|
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.
|
|
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.
|
|
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
|
|
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[
|
|
131
|
-
parameters: Union[
|
|
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[
|
|
136
|
+
features (Union[Parameters,np.ndarray]): Input vector of the features
|
|
138
137
|
from which the gate inputs are obtained.
|
|
139
|
-
param_vec (Union[
|
|
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(
|
|
160
|
+
QC.rz(i % self.num_qubits, features[i % num_features])
|
|
162
161
|
else:
|
|
163
|
-
QC.rx(
|
|
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]
|
|
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(
|
|
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(
|
|
185
|
+
QC.rz(i % self.num_qubits, features[i % num_features])
|
|
187
186
|
else:
|
|
188
|
-
QC.rx(
|
|
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[
|
|
181
|
-
parameters: Union[
|
|
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[
|
|
188
|
-
parameters (Union[
|
|
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 *
|
|
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]
|
|
220
|
-
QC.rx(parameters[index_offset + 1]
|
|
221
|
-
QC.rz(parameters[index_offset + 2]
|
|
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
|
|
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[
|
|
109
|
-
parameters: Union[
|
|
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[
|
|
114
|
+
features (Union[Parameters,np.ndarray]): Input vector of the features
|
|
116
115
|
from which the gate inputs are obtained.
|
|
117
|
-
param_vec (Union[
|
|
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]
|
|
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(
|
|
148
|
+
QC.crx(i, (i + 1) % self.num_qubits, parameters[index_offset % num_params])
|
|
150
149
|
index_offset += 1
|
|
151
|
-
QC.cry(
|
|
150
|
+
QC.cry(i, (i + 1) % self.num_qubits, parameters[index_offset % num_params])
|
|
152
151
|
index_offset += 1
|
|
153
|
-
QC.crz(
|
|
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(
|
|
162
|
+
QC.crx(i, (i + 1) % self.num_qubits, parameters[index_offset % num_params])
|
|
164
163
|
index_offset += 1
|
|
165
|
-
QC.cry(
|
|
164
|
+
QC.cry(i, (i + 1) % self.num_qubits, parameters[index_offset % num_params])
|
|
166
165
|
index_offset += 1
|
|
167
|
-
QC.crz(
|
|
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]
|
|
171
|
+
QC.rz(i, features[feature_offset % num_features])
|
|
173
172
|
feature_offset += 1
|
|
174
173
|
return QC
|