classiq 0.38.0__py3-none-any.whl → 0.65.4__py3-none-any.whl
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.
- classiq/__init__.py +47 -32
- classiq/_analyzer_extras/_ipywidgets_async_extension.py +2 -1
- classiq/_internals/api_wrapper.py +235 -97
- classiq/_internals/async_utils.py +1 -3
- classiq/_internals/authentication/auth0.py +26 -10
- classiq/_internals/authentication/authentication.py +11 -0
- classiq/_internals/authentication/device.py +10 -5
- classiq/_internals/authentication/password_manager.py +18 -6
- classiq/_internals/authentication/token_manager.py +10 -5
- classiq/_internals/client.py +94 -33
- classiq/_internals/config.py +3 -4
- classiq/_internals/host_checker.py +38 -15
- classiq/_internals/jobs.py +60 -57
- classiq/_internals/type_validation.py +9 -9
- classiq/analyzer/__init__.py +1 -3
- classiq/analyzer/analyzer.py +24 -19
- classiq/analyzer/analyzer_utilities.py +10 -10
- classiq/analyzer/rb.py +15 -15
- classiq/analyzer/show_interactive_hack.py +27 -4
- classiq/analyzer/url_utils.py +2 -3
- classiq/applications/__init__.py +3 -12
- classiq/applications/chemistry/__init__.py +14 -10
- classiq/applications/chemistry/ansatz_parameters.py +4 -4
- classiq/{applications_model_constructors → applications/chemistry}/chemistry_model_constructor.py +165 -158
- classiq/applications/chemistry/ground_state_problem.py +1 -1
- classiq/{applications_model_constructors → applications}/combinatorial_helpers/allowed_constraints.py +4 -1
- classiq/{applications_model_constructors → applications}/combinatorial_helpers/arithmetic/arithmetic_expression.py +1 -1
- classiq/{applications_model_constructors → applications}/combinatorial_helpers/arithmetic/isolation.py +1 -1
- classiq/{applications_model_constructors → applications}/combinatorial_helpers/combinatorial_problem_utils.py +51 -15
- classiq/{applications_model_constructors → applications}/combinatorial_helpers/encoding_mapping.py +12 -12
- classiq/{applications_model_constructors → applications}/combinatorial_helpers/encoding_utils.py +8 -6
- classiq/{applications_model_constructors → applications}/combinatorial_helpers/memory.py +7 -11
- classiq/{applications_model_constructors → applications}/combinatorial_helpers/optimization_model.py +67 -40
- classiq/applications/combinatorial_helpers/pauli_helpers/pauli_utils.py +46 -0
- classiq/applications/combinatorial_helpers/pyomo_utils.py +447 -0
- classiq/{applications_model_constructors → applications}/combinatorial_helpers/sympy_utils.py +2 -2
- classiq/{applications_model_constructors → applications}/combinatorial_helpers/transformations/encoding.py +15 -20
- classiq/{applications_model_constructors → applications}/combinatorial_helpers/transformations/fixed_variables.py +14 -15
- classiq/{applications_model_constructors → applications}/combinatorial_helpers/transformations/ising_converter.py +11 -15
- classiq/{applications_model_constructors → applications}/combinatorial_helpers/transformations/penalty.py +1 -2
- classiq/{applications_model_constructors → applications}/combinatorial_helpers/transformations/penalty_support.py +3 -7
- classiq/{applications_model_constructors → applications}/combinatorial_helpers/transformations/sign_seperation.py +2 -3
- classiq/{applications_model_constructors → applications}/combinatorial_helpers/transformations/slack_variables.py +5 -8
- classiq/applications/combinatorial_optimization/__init__.py +20 -6
- classiq/applications/combinatorial_optimization/combinatorial_optimization_config.py +2 -2
- classiq/{applications_model_constructors → applications/combinatorial_optimization}/combinatorial_optimization_model_constructor.py +35 -33
- classiq/applications/combinatorial_optimization/combinatorial_problem.py +229 -0
- classiq/applications/combinatorial_optimization/examples/__init__.py +1 -3
- classiq/applications/finance/__init__.py +4 -5
- classiq/{applications_model_constructors → applications/finance}/finance_model_constructor.py +48 -42
- classiq/applications/grover/__init__.py +9 -0
- classiq/{applications_model_constructors → applications/grover}/grover_model_constructor.py +52 -51
- classiq/applications/hamiltonian/pauli_decomposition.py +113 -0
- classiq/applications/libraries/qmci_library.py +22 -0
- classiq/applications/qnn/__init__.py +2 -4
- classiq/applications/qnn/circuit_utils.py +6 -6
- classiq/applications/qnn/datasets/__init__.py +9 -11
- classiq/applications/qnn/datasets/dataset_base_classes.py +7 -5
- classiq/applications/qnn/datasets/dataset_not.py +2 -1
- classiq/applications/qnn/datasets/dataset_parity.py +2 -2
- classiq/applications/qnn/gradients/quantum_gradient.py +1 -1
- classiq/applications/qnn/gradients/simple_quantum_gradient.py +2 -1
- classiq/applications/qnn/qlayer.py +30 -10
- classiq/applications/qnn/torch_utils.py +4 -3
- classiq/applications/qnn/types.py +5 -5
- classiq/applications/qsvm/__init__.py +6 -4
- classiq/applications/qsvm/qsvm.py +3 -6
- classiq/applications/qsvm/qsvm_data_generation.py +3 -3
- classiq/{applications_model_constructors → applications/qsvm}/qsvm_model_constructor.py +30 -28
- classiq/execution/__init__.py +8 -3
- classiq/execution/all_hardware_devices.py +11 -0
- classiq/execution/execution_session.py +400 -0
- classiq/execution/iqcc.py +63 -0
- classiq/execution/jobs.py +197 -25
- classiq/execution/qnn.py +79 -0
- classiq/executor.py +20 -115
- classiq/interface/_version.py +1 -1
- classiq/interface/analyzer/analysis_params.py +43 -13
- classiq/interface/analyzer/cytoscape_graph.py +15 -9
- classiq/interface/analyzer/result.py +28 -32
- classiq/interface/applications/qsvm.py +20 -29
- classiq/interface/ast_node.py +16 -0
- classiq/interface/backend/backend_preferences.py +390 -121
- classiq/interface/backend/ionq/ionq_quantum_program.py +15 -23
- classiq/interface/backend/pydantic_backend.py +25 -22
- classiq/interface/backend/quantum_backend_providers.py +69 -16
- classiq/interface/chemistry/fermionic_operator.py +30 -21
- classiq/interface/chemistry/ground_state_problem.py +28 -25
- classiq/interface/chemistry/molecule.py +14 -10
- classiq/interface/chemistry/operator.py +64 -231
- classiq/interface/combinatorial_optimization/encoding_types.py +1 -1
- classiq/interface/combinatorial_optimization/examples/ascending_sequence.py +1 -3
- classiq/interface/combinatorial_optimization/examples/integer_portfolio_optimization.py +2 -4
- classiq/interface/combinatorial_optimization/examples/knapsack.py +3 -3
- classiq/interface/combinatorial_optimization/examples/mht.py +10 -6
- classiq/interface/combinatorial_optimization/examples/portfolio_variations.py +2 -2
- classiq/interface/combinatorial_optimization/examples/set_cover.py +1 -2
- classiq/interface/combinatorial_optimization/mht_qaoa_input.py +8 -9
- classiq/interface/combinatorial_optimization/optimization_problem.py +2 -2
- classiq/interface/combinatorial_optimization/result.py +1 -3
- classiq/interface/combinatorial_optimization/solver_types.py +1 -1
- classiq/interface/debug_info/debug_info.py +86 -0
- classiq/{exceptions.py → interface/exceptions.py} +37 -9
- classiq/interface/execution/iqcc.py +19 -0
- classiq/interface/execution/jobs.py +15 -12
- classiq/interface/execution/primitives.py +18 -0
- classiq/interface/executor/constants.py +1 -0
- classiq/interface/executor/execution_preferences.py +26 -114
- classiq/interface/executor/execution_request.py +24 -46
- classiq/interface/executor/execution_result.py +30 -8
- classiq/interface/executor/iqae_result.py +4 -6
- classiq/interface/executor/optimizer_preferences.py +17 -14
- classiq/interface/executor/quantum_code.py +28 -24
- classiq/interface/executor/quantum_instruction_set.py +2 -2
- classiq/interface/executor/register_initialization.py +11 -14
- classiq/interface/executor/result.py +83 -56
- classiq/interface/executor/vqe_result.py +10 -10
- classiq/interface/finance/function_input.py +35 -25
- classiq/interface/finance/gaussian_model_input.py +5 -5
- classiq/interface/finance/log_normal_model_input.py +4 -4
- classiq/interface/finance/model_input.py +4 -4
- classiq/interface/generator/adjacency.py +1 -3
- classiq/interface/generator/amplitude_loading.py +22 -12
- classiq/interface/generator/ansatz_library.py +5 -5
- classiq/interface/generator/application_apis/arithmetic_declarations.py +8 -5
- classiq/interface/generator/application_apis/chemistry_declarations.py +27 -187
- classiq/interface/generator/application_apis/combinatorial_optimization_declarations.py +18 -21
- classiq/interface/generator/application_apis/entangler_declarations.py +11 -6
- classiq/interface/generator/application_apis/finance_declarations.py +48 -69
- classiq/interface/generator/application_apis/qsvm_declarations.py +0 -70
- classiq/interface/generator/arith/argument_utils.py +46 -5
- classiq/interface/generator/arith/arithmetic.py +35 -16
- classiq/interface/generator/arith/arithmetic_arg_type_validator.py +6 -7
- classiq/interface/generator/arith/arithmetic_expression_abc.py +66 -25
- classiq/interface/generator/arith/arithmetic_expression_parser.py +11 -11
- classiq/interface/generator/arith/arithmetic_expression_validator.py +47 -43
- classiq/interface/generator/arith/arithmetic_operations.py +14 -6
- classiq/interface/generator/arith/arithmetic_param_getters.py +7 -8
- classiq/interface/generator/arith/arithmetic_result_builder.py +21 -17
- classiq/interface/generator/arith/ast_node_rewrite.py +3 -2
- classiq/interface/generator/arith/binary_ops.py +218 -130
- classiq/interface/generator/arith/endianness.py +1 -1
- classiq/interface/generator/arith/extremum_operations.py +96 -25
- classiq/interface/generator/arith/logical_ops.py +14 -12
- classiq/interface/generator/arith/number_utils.py +12 -6
- classiq/interface/generator/arith/register_user_input.py +60 -37
- classiq/interface/generator/arith/unary_ops.py +49 -29
- classiq/interface/generator/arith/uncomputation_methods.py +1 -1
- classiq/interface/generator/builtin_api_builder.py +2 -9
- classiq/interface/generator/chemistry_function_params.py +3 -3
- classiq/interface/generator/circuit_code/circuit_code.py +7 -7
- classiq/interface/generator/circuit_code/types_and_constants.py +4 -7
- classiq/interface/generator/commuting_pauli_exponentiation.py +7 -7
- classiq/interface/generator/compiler_keywords.py +5 -1
- classiq/interface/generator/complex_type.py +13 -18
- classiq/interface/generator/constant.py +3 -4
- classiq/interface/generator/control_state.py +34 -29
- classiq/interface/generator/copy.py +47 -0
- classiq/interface/generator/custom_ansatz.py +2 -5
- classiq/interface/generator/distance.py +3 -5
- classiq/interface/generator/excitations.py +3 -2
- classiq/interface/generator/expressions/atomic_expression_functions.py +21 -5
- classiq/interface/generator/expressions/enums/__init__.py +0 -10
- classiq/interface/generator/expressions/enums/finance_functions.py +12 -22
- classiq/interface/generator/expressions/evaluated_expression.py +5 -5
- classiq/interface/generator/expressions/expression.py +26 -14
- classiq/interface/generator/expressions/expression_constants.py +9 -3
- classiq/interface/generator/expressions/non_symbolic_expr.py +119 -0
- classiq/interface/generator/expressions/qmod_qarray_proxy.py +99 -0
- classiq/interface/generator/expressions/qmod_qscalar_proxy.py +34 -8
- classiq/interface/generator/expressions/qmod_qstruct_proxy.py +36 -0
- classiq/interface/generator/expressions/qmod_sized_proxy.py +30 -2
- classiq/interface/generator/expressions/qmod_struct_instance.py +14 -2
- classiq/interface/generator/expressions/sympy_supported_expressions.py +19 -11
- classiq/interface/generator/finance.py +2 -2
- classiq/interface/generator/function_param_library.py +6 -6
- classiq/interface/generator/function_param_list_without_self_reference.py +2 -10
- classiq/interface/generator/function_params.py +36 -64
- classiq/interface/generator/functions/__init__.py +0 -22
- classiq/interface/generator/functions/builtins/internal_operators.py +16 -0
- classiq/interface/generator/functions/classical_function_declaration.py +18 -9
- classiq/interface/generator/functions/classical_type.py +47 -166
- classiq/interface/generator/functions/concrete_types.py +55 -0
- classiq/interface/generator/functions/function_declaration.py +13 -14
- classiq/interface/generator/functions/port_declaration.py +1 -13
- classiq/interface/generator/functions/qmod_python_interface.py +2 -1
- classiq/interface/generator/functions/type_name.py +90 -0
- classiq/interface/generator/generated_circuit_data.py +153 -20
- classiq/interface/generator/grover_diffuser.py +32 -25
- classiq/interface/generator/grover_operator.py +34 -25
- classiq/interface/generator/hamiltonian_evolution/exponentiation.py +4 -6
- classiq/interface/generator/hamiltonian_evolution/qdrift.py +4 -4
- classiq/interface/generator/hamiltonian_evolution/suzuki_trotter.py +9 -9
- classiq/interface/generator/hardware/hardware_data.py +72 -34
- classiq/interface/generator/hardware_efficient_ansatz.py +20 -16
- classiq/interface/generator/hartree_fock.py +13 -5
- classiq/interface/generator/identity.py +10 -6
- classiq/interface/generator/linear_pauli_rotations.py +32 -20
- classiq/interface/generator/mcmt_method.py +1 -1
- classiq/interface/generator/mcu.py +17 -15
- classiq/interface/generator/mcx.py +24 -17
- classiq/interface/generator/model/__init__.py +2 -5
- classiq/interface/generator/model/constraints.py +26 -8
- classiq/interface/generator/model/model.py +27 -190
- classiq/interface/generator/model/preferences/preferences.py +115 -41
- classiq/{quantum_register.py → interface/generator/model/quantum_register.py} +14 -17
- classiq/interface/generator/oracles/arithmetic_oracle.py +2 -4
- classiq/interface/generator/oracles/custom_oracle.py +15 -13
- classiq/interface/generator/oracles/oracle_abc.py +7 -7
- classiq/interface/generator/partitioned_register.py +7 -7
- classiq/interface/generator/piecewise_linear_amplitude_loading.py +45 -29
- classiq/interface/generator/preferences/optimization.py +1 -2
- classiq/interface/generator/qpe.py +41 -30
- classiq/interface/generator/qsvm.py +9 -10
- classiq/interface/generator/quantum_function_call.py +88 -73
- classiq/interface/generator/quantum_program.py +41 -24
- classiq/interface/generator/range_types.py +11 -12
- classiq/interface/generator/register_role.py +18 -6
- classiq/interface/generator/slice_parsing_utils.py +5 -5
- classiq/interface/generator/standard_gates/controlled_standard_gates.py +30 -39
- classiq/interface/generator/standard_gates/standard_angle_metaclass.py +2 -6
- classiq/interface/generator/standard_gates/standard_gates.py +3 -3
- classiq/interface/generator/standard_gates/u_gate.py +7 -10
- classiq/interface/generator/state_preparation/bell_state_preparation.py +3 -3
- classiq/interface/generator/state_preparation/computational_basis_state_preparation.py +2 -1
- classiq/interface/generator/state_preparation/distributions.py +16 -15
- classiq/interface/generator/state_preparation/metrics.py +4 -7
- classiq/interface/generator/state_preparation/state_preparation.py +25 -20
- classiq/interface/generator/synthesis_metadata/synthesis_duration.py +0 -4
- classiq/interface/generator/synthesis_metadata/synthesis_execution_data.py +20 -6
- classiq/interface/generator/transpiler_basis_gates.py +7 -3
- classiq/interface/generator/types/builtin_enum_declarations.py +178 -0
- classiq/interface/generator/types/compilation_metadata.py +6 -0
- classiq/interface/generator/types/enum_declaration.py +54 -0
- classiq/interface/generator/types/qstruct_declaration.py +18 -0
- classiq/interface/generator/types/struct_declaration.py +7 -11
- classiq/interface/generator/ucc.py +5 -4
- classiq/interface/generator/unitary_gate.py +5 -5
- classiq/interface/generator/user_defined_function_params.py +4 -1
- classiq/interface/generator/validations/flow_graph.py +7 -7
- classiq/interface/generator/validations/validator_functions.py +4 -4
- classiq/interface/generator/visitor.py +23 -16
- classiq/interface/hardware.py +29 -8
- classiq/interface/helpers/classproperty.py +8 -0
- classiq/interface/helpers/custom_encoders.py +2 -2
- classiq/interface/helpers/custom_pydantic_types.py +40 -50
- classiq/interface/helpers/datastructures.py +26 -0
- classiq/interface/helpers/hashable_mixin.py +3 -2
- classiq/interface/helpers/hashable_pydantic_base_model.py +2 -1
- classiq/interface/helpers/pydantic_model_helpers.py +7 -5
- classiq/interface/helpers/validation_helpers.py +3 -20
- classiq/interface/helpers/versioned_model.py +1 -4
- classiq/interface/ide/ide_data.py +16 -20
- classiq/interface/ide/visual_model.py +130 -0
- classiq/interface/interface_version.py +1 -0
- classiq/interface/jobs.py +29 -69
- classiq/interface/model/allocate.py +16 -0
- classiq/interface/model/bind_operation.py +32 -9
- classiq/interface/model/classical_if.py +15 -0
- classiq/interface/model/classical_parameter_declaration.py +33 -3
- classiq/interface/model/control.py +45 -0
- classiq/interface/model/handle_binding.py +298 -20
- classiq/interface/model/inplace_binary_operation.py +29 -24
- classiq/interface/model/invert.py +12 -0
- classiq/interface/model/model.py +69 -61
- classiq/interface/model/native_function_definition.py +17 -20
- classiq/interface/model/parameter.py +13 -0
- classiq/interface/model/phase_operation.py +11 -0
- classiq/interface/model/port_declaration.py +27 -9
- classiq/interface/model/power.py +14 -0
- classiq/interface/model/quantum_expressions/amplitude_loading_operation.py +30 -18
- classiq/interface/model/quantum_expressions/arithmetic_operation.py +51 -14
- classiq/interface/model/quantum_expressions/quantum_expression.py +12 -35
- classiq/interface/model/quantum_function_call.py +141 -343
- classiq/interface/model/quantum_function_declaration.py +190 -157
- classiq/interface/model/quantum_lambda_function.py +33 -32
- classiq/interface/model/quantum_statement.py +71 -12
- classiq/interface/model/quantum_type.py +177 -40
- classiq/interface/model/quantum_variable_declaration.py +3 -25
- classiq/interface/model/repeat.py +15 -0
- classiq/interface/model/statement_block.py +40 -14
- classiq/interface/model/validation_handle.py +13 -6
- classiq/interface/model/variable_declaration_statement.py +3 -1
- classiq/interface/model/within_apply_operation.py +7 -5
- classiq/interface/server/global_versions.py +6 -7
- classiq/interface/server/routes.py +17 -21
- classiq/interface/source_reference.py +59 -0
- classiq/model_expansions/atomic_expression_functions_defs.py +253 -0
- classiq/model_expansions/capturing/__init__.py +0 -0
- classiq/model_expansions/capturing/captured_vars.py +435 -0
- classiq/model_expansions/capturing/mangling_utils.py +56 -0
- classiq/model_expansions/closure.py +171 -0
- classiq/model_expansions/debug_flag.py +3 -0
- classiq/model_expansions/evaluators/__init__.py +0 -0
- classiq/model_expansions/evaluators/arg_type_match.py +158 -0
- classiq/model_expansions/evaluators/argument_types.py +42 -0
- classiq/model_expansions/evaluators/classical_expression.py +36 -0
- classiq/model_expansions/evaluators/control.py +144 -0
- classiq/model_expansions/evaluators/parameter_types.py +226 -0
- classiq/model_expansions/evaluators/quantum_type_utils.py +239 -0
- classiq/model_expansions/evaluators/type_type_match.py +90 -0
- classiq/model_expansions/expression_evaluator.py +135 -0
- classiq/model_expansions/expression_renamer.py +76 -0
- classiq/model_expansions/function_builder.py +247 -0
- classiq/model_expansions/generative_functions.py +158 -0
- classiq/model_expansions/interpreters/__init__.py +0 -0
- classiq/model_expansions/interpreters/base_interpreter.py +263 -0
- classiq/model_expansions/interpreters/frontend_generative_interpreter.py +28 -0
- classiq/model_expansions/interpreters/generative_interpreter.py +249 -0
- classiq/model_expansions/model_tables.py +18 -0
- classiq/model_expansions/quantum_operations/__init__.py +9 -0
- classiq/model_expansions/quantum_operations/bind.py +60 -0
- classiq/model_expansions/quantum_operations/call_emitter.py +266 -0
- classiq/model_expansions/quantum_operations/classicalif.py +53 -0
- classiq/model_expansions/quantum_operations/declarative_call_emitter.py +87 -0
- classiq/model_expansions/quantum_operations/emitter.py +181 -0
- classiq/model_expansions/quantum_operations/quantum_function_call.py +33 -0
- classiq/model_expansions/quantum_operations/repeat.py +56 -0
- classiq/model_expansions/quantum_operations/shallow_emitter.py +180 -0
- classiq/model_expansions/quantum_operations/variable_decleration.py +28 -0
- classiq/model_expansions/scope.py +240 -0
- classiq/model_expansions/scope_initialization.py +150 -0
- classiq/model_expansions/sympy_conversion/__init__.py +0 -0
- classiq/model_expansions/sympy_conversion/arithmetics.py +49 -0
- classiq/model_expansions/sympy_conversion/expression_to_sympy.py +179 -0
- classiq/model_expansions/sympy_conversion/sympy_to_python.py +123 -0
- classiq/model_expansions/transformers/__init__.py +0 -0
- classiq/model_expansions/transformers/ast_renamer.py +26 -0
- classiq/model_expansions/transformers/var_splitter.py +299 -0
- classiq/model_expansions/utils/__init__.py +0 -0
- classiq/model_expansions/utils/counted_name_allocator.py +11 -0
- classiq/model_expansions/utils/handles_collector.py +33 -0
- classiq/model_expansions/visitors/__init__.py +0 -0
- classiq/model_expansions/visitors/boolean_expression_transformers.py +214 -0
- classiq/model_expansions/visitors/variable_references.py +144 -0
- classiq/open_library/__init__.py +4 -0
- classiq/open_library/functions/__init__.py +130 -0
- classiq/open_library/functions/amplitude_estimation.py +30 -0
- classiq/open_library/functions/discrete_sine_cosine_transform.py +181 -0
- classiq/open_library/functions/grover.py +157 -0
- classiq/open_library/functions/hea.py +115 -0
- classiq/open_library/functions/linear_pauli_rotation.py +82 -0
- classiq/open_library/functions/modular_exponentiation.py +201 -0
- classiq/open_library/functions/qaoa_penalty.py +117 -0
- classiq/open_library/functions/qft_functions.py +54 -0
- classiq/open_library/functions/qpe.py +46 -0
- classiq/open_library/functions/qsvt.py +331 -0
- classiq/open_library/functions/state_preparation.py +301 -0
- classiq/open_library/functions/swap_test.py +27 -0
- classiq/open_library/functions/utility_functions.py +81 -0
- classiq/open_library/functions/variational.py +52 -0
- classiq/qmod/__init__.py +10 -10
- classiq/qmod/builtins/__init__.py +19 -2
- classiq/qmod/builtins/classical_execution_primitives.py +36 -14
- classiq/qmod/builtins/classical_functions.py +39 -43
- classiq/qmod/builtins/constants.py +10 -0
- classiq/qmod/builtins/enums.py +208 -0
- classiq/qmod/builtins/functions/__init__.py +137 -0
- classiq/qmod/builtins/functions/allocation.py +150 -0
- classiq/qmod/builtins/functions/arithmetic.py +55 -0
- classiq/qmod/builtins/functions/benchmarking.py +8 -0
- classiq/qmod/builtins/functions/chemistry.py +91 -0
- classiq/qmod/builtins/functions/exponentiation.py +105 -0
- classiq/qmod/builtins/functions/finance.py +34 -0
- classiq/qmod/builtins/functions/operators.py +16 -0
- classiq/qmod/builtins/functions/qsvm.py +24 -0
- classiq/qmod/builtins/functions/standard_gates.py +651 -0
- classiq/qmod/builtins/operations.py +373 -40
- classiq/qmod/builtins/structs.py +103 -80
- classiq/qmod/cfunc.py +2 -2
- classiq/qmod/classical_function.py +4 -8
- classiq/qmod/cparam.py +64 -0
- classiq/qmod/create_model_function.py +56 -0
- classiq/qmod/declaration_inferrer.py +143 -101
- classiq/qmod/expression_query.py +20 -4
- classiq/qmod/generative.py +42 -0
- classiq/qmod/model_state_container.py +18 -6
- classiq/qmod/native/__init__.py +7 -0
- classiq/qmod/native/expression_to_qmod.py +16 -11
- classiq/qmod/native/pretty_printer.py +187 -97
- classiq/qmod/pretty_print/__init__.py +7 -0
- classiq/qmod/pretty_print/expression_to_python.py +222 -0
- classiq/qmod/pretty_print/pretty_printer.py +572 -0
- classiq/qmod/python_classical_type.py +67 -0
- classiq/qmod/qfunc.py +60 -8
- classiq/qmod/qmod_constant.py +93 -26
- classiq/qmod/qmod_parameter.py +68 -59
- classiq/qmod/qmod_variable.py +468 -155
- classiq/qmod/quantum_callable.py +17 -7
- classiq/qmod/quantum_expandable.py +269 -96
- classiq/qmod/quantum_function.py +196 -41
- classiq/qmod/semantics/__init__.py +0 -0
- classiq/qmod/semantics/annotation/__init__.py +0 -0
- classiq/qmod/semantics/annotation/call_annotation.py +92 -0
- classiq/qmod/semantics/annotation/qstruct_annotator.py +23 -0
- classiq/qmod/semantics/error_manager.py +88 -0
- classiq/qmod/semantics/lambdas.py +25 -0
- classiq/qmod/semantics/static_semantics_visitor.py +384 -0
- classiq/qmod/semantics/validation/__init__.py +0 -0
- classiq/qmod/semantics/validation/constants_validation.py +16 -0
- classiq/qmod/semantics/validation/func_call_validation.py +99 -0
- classiq/qmod/semantics/validation/function_name_collisions_validation.py +23 -0
- classiq/qmod/semantics/validation/handle_validation.py +85 -0
- classiq/qmod/semantics/validation/main_validation.py +33 -0
- classiq/qmod/semantics/validation/types_validation.py +128 -0
- classiq/qmod/symbolic.py +147 -123
- classiq/qmod/symbolic_expr.py +27 -12
- classiq/qmod/symbolic_type.py +2 -5
- classiq/qmod/type_attribute_remover.py +32 -0
- classiq/qmod/utilities.py +98 -4
- classiq/qmod/write_qmod.py +17 -3
- classiq/synthesis.py +210 -22
- {classiq-0.38.0.dist-info → classiq-0.65.4.dist-info}/METADATA +16 -9
- classiq-0.65.4.dist-info/RECORD +521 -0
- classiq/_internals/_qfunc_ext.py +0 -6
- classiq/applications/benchmarking/__init__.py +0 -9
- classiq/applications/benchmarking/mirror_benchmarking.py +0 -70
- classiq/applications/numpy_utils.py +0 -37
- classiq/applications_model_constructors/__init__.py +0 -25
- classiq/applications_model_constructors/combinatorial_helpers/multiple_comp_basis_sp.py +0 -34
- classiq/applications_model_constructors/combinatorial_helpers/pauli_helpers/pauli_utils.py +0 -65
- classiq/applications_model_constructors/combinatorial_helpers/pyomo_utils.py +0 -243
- classiq/applications_model_constructors/libraries/ampltitude_estimation_library.py +0 -11
- classiq/applications_model_constructors/libraries/qmci_library.py +0 -107
- classiq/builtin_functions/__init__.py +0 -43
- classiq/builtin_functions/amplitude_loading.py +0 -3
- classiq/builtin_functions/binary_ops.py +0 -1
- classiq/builtin_functions/exponentiation.py +0 -5
- classiq/builtin_functions/qpe.py +0 -4
- classiq/builtin_functions/qsvm.py +0 -7
- classiq/builtin_functions/range_types.py +0 -5
- classiq/builtin_functions/standard_gates.py +0 -1
- classiq/builtin_functions/state_preparation.py +0 -6
- classiq/builtin_functions/suzuki_trotter.py +0 -3
- classiq/interface/executor/aws_execution_cost.py +0 -73
- classiq/interface/executor/error_mitigation.py +0 -6
- classiq/interface/generator/credit_risk_example/linear_gci.py +0 -122
- classiq/interface/generator/credit_risk_example/weighted_adder.py +0 -69
- classiq/interface/generator/expressions/enums/chemistry.py +0 -28
- classiq/interface/generator/expressions/enums/classical_enum.py +0 -5
- classiq/interface/generator/expressions/enums/ladder_operator.py +0 -16
- classiq/interface/generator/expressions/enums/optimizers.py +0 -9
- classiq/interface/generator/expressions/enums/pauli.py +0 -8
- classiq/interface/generator/expressions/enums/qsvm_feature_map_entanglement.py +0 -9
- classiq/interface/generator/functions/core_lib_declarations/quantum_functions/__init__.py +0 -18
- classiq/interface/generator/functions/core_lib_declarations/quantum_functions/atomic_quantum_functions.py +0 -641
- classiq/interface/generator/functions/core_lib_declarations/quantum_functions/exponentiation_functions.py +0 -89
- classiq/interface/generator/functions/core_lib_declarations/quantum_functions/std_lib_functions.py +0 -1229
- classiq/interface/generator/functions/core_lib_declarations/quantum_operators.py +0 -95
- classiq/interface/generator/functions/foreign_function_definition.py +0 -114
- classiq/interface/generator/functions/function_implementation.py +0 -107
- classiq/interface/generator/functions/native_function_definition.py +0 -155
- classiq/interface/generator/functions/quantum_function_declaration.py +0 -69
- classiq/interface/generator/functions/register.py +0 -44
- classiq/interface/generator/functions/register_mapping_data.py +0 -106
- classiq/interface/generator/inequality_mixer.py +0 -51
- classiq/interface/generator/model/classical_main_validator.py +0 -106
- classiq/interface/generator/range_mixer.py +0 -56
- classiq/interface/generator/state_propagator.py +0 -74
- classiq/interface/generator/types/builtin_struct_declarations/__init__.py +0 -1
- classiq/interface/generator/types/builtin_struct_declarations/pauli_struct_declarations.py +0 -22
- classiq/interface/ide/show.py +0 -34
- classiq/interface/model/call_synthesis_data.py +0 -68
- classiq/interface/model/common_model_types.py +0 -23
- classiq/interface/model/quantum_expressions/control_state.py +0 -38
- classiq/interface/model/quantum_if_operation.py +0 -94
- classiq/interface/model/resolvers/function_call_resolver.py +0 -43
- classiq/interface/model/validations/handle_validation_base.py +0 -55
- classiq/interface/model/validations/handles_validator.py +0 -156
- classiq/interface/model/validations/port_to_wire_name_generator.py +0 -12
- classiq/model/__init__.py +0 -14
- classiq/model/composite_function_generator.py +0 -33
- classiq/model/function_handler.py +0 -462
- classiq/model/logic_flow.py +0 -149
- classiq/model/logic_flow_change_handler.py +0 -71
- classiq/model/model.py +0 -229
- classiq/qmod/builtins/functions.py +0 -913
- classiq/qmod/qmod_struct.py +0 -37
- classiq/quantum_functions/__init__.py +0 -17
- classiq/quantum_functions/annotation_parser.py +0 -205
- classiq/quantum_functions/decorators.py +0 -22
- classiq/quantum_functions/function_library.py +0 -181
- classiq/quantum_functions/function_parser.py +0 -74
- classiq/quantum_functions/quantum_function.py +0 -236
- classiq-0.38.0.dist-info/RECORD +0 -454
- /classiq/{applications_model_constructors → applications}/combinatorial_helpers/__init__.py +0 -0
- /classiq/{applications_model_constructors → applications}/combinatorial_helpers/arithmetic/__init__.py +0 -0
- /classiq/{applications_model_constructors → applications}/combinatorial_helpers/pauli_helpers/__init__.py +0 -0
- /classiq/{applications_model_constructors → applications}/combinatorial_helpers/pauli_helpers/pauli_sparsing.py +0 -0
- /classiq/{applications_model_constructors → applications}/combinatorial_helpers/py.typed +0 -0
- /classiq/{applications_model_constructors/combinatorial_helpers/transformations → applications/combinatorial_helpers/solvers}/__init__.py +0 -0
- /classiq/{applications_model_constructors/libraries → applications/combinatorial_helpers/transformations}/__init__.py +0 -0
- /classiq/{interface/generator/credit_risk_example → applications/hamiltonian}/__init__.py +0 -0
- /classiq/{interface/generator/functions/core_lib_declarations → applications/libraries}/__init__.py +0 -0
- /classiq/interface/{model/resolvers → debug_info}/__init__.py +0 -0
- /classiq/{_internals → interface}/enum_utils.py +0 -0
- /classiq/interface/{model/validations → generator/functions/builtins}/__init__.py +0 -0
- /classiq/{interface/generator/functions/core_lib_declarations/quantum_functions/chemistry_functions.py → model_expansions/__init__.py} +0 -0
- {classiq-0.38.0.dist-info → classiq-0.65.4.dist-info}/WHEEL +0 -0
@@ -1,10 +1,12 @@
|
|
1
1
|
from __future__ import annotations
|
2
2
|
|
3
|
-
|
4
|
-
from
|
3
|
+
import warnings
|
4
|
+
from collections.abc import Iterable
|
5
|
+
from typing import Any, Optional, Union
|
5
6
|
|
6
7
|
import pydantic
|
7
|
-
from pydantic import BaseModel
|
8
|
+
from pydantic import BaseModel
|
9
|
+
from pydantic_settings import BaseSettings, SettingsConfigDict
|
8
10
|
|
9
11
|
from classiq.interface.backend import pydantic_backend
|
10
12
|
from classiq.interface.backend.quantum_backend_providers import (
|
@@ -12,24 +14,31 @@ from classiq.interface.backend.quantum_backend_providers import (
|
|
12
14
|
AliceBobBackendNames,
|
13
15
|
AmazonBraketBackendNames,
|
14
16
|
AzureQuantumBackendNames,
|
15
|
-
ClassiqAerBackendNames,
|
16
17
|
ClassiqNvidiaBackendNames,
|
18
|
+
ClassiqSimulatorBackendNames,
|
19
|
+
IntelBackendNames,
|
17
20
|
IonqBackendNames,
|
18
21
|
OQCBackendNames,
|
19
22
|
ProviderTypeVendor,
|
20
23
|
ProviderVendor,
|
21
24
|
)
|
25
|
+
from classiq.interface.exceptions import ClassiqDeprecationWarning
|
22
26
|
from classiq.interface.hardware import Provider
|
23
|
-
from classiq.interface.helpers.pydantic_model_helpers import values_with_discriminator
|
24
|
-
|
25
|
-
from classiq.exceptions import ClassiqValueError
|
26
27
|
|
27
28
|
|
28
29
|
class BackendPreferences(BaseModel):
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
30
|
+
"""
|
31
|
+
Preferences for the execution of the quantum program.
|
32
|
+
|
33
|
+
For more details, refer to:
|
34
|
+
[BackendPreferences](https://docs.classiq.io/latest/reference-manual/python-sdk/?h=backend#classiq.Preferences.backend_preferences)
|
35
|
+
|
36
|
+
Attributes:
|
37
|
+
backend_service_provider (str): Provider company or cloud for the requested backend.
|
38
|
+
backend_name (str): Name of the requested backend or target.
|
39
|
+
"""
|
40
|
+
|
41
|
+
backend_service_provider: ProviderVendor = pydantic.Field(
|
33
42
|
..., description="Provider company or cloud for the requested backend."
|
34
43
|
)
|
35
44
|
backend_name: str = pydantic.Field(
|
@@ -40,89 +49,220 @@ class BackendPreferences(BaseModel):
|
|
40
49
|
def hw_provider(self) -> Provider:
|
41
50
|
return Provider(self.backend_service_provider)
|
42
51
|
|
43
|
-
@pydantic.validator("backend_service_provider", pre=True)
|
44
|
-
def validate_backend_service_provider(
|
45
|
-
cls, backend_service_provider: Any
|
46
|
-
) -> Provider:
|
47
|
-
return validate_backend_service_provider(backend_service_provider)
|
48
|
-
|
49
52
|
@classmethod
|
50
53
|
def batch_preferences(
|
51
54
|
cls, *, backend_names: Iterable[str], **kwargs: Any
|
52
|
-
) ->
|
55
|
+
) -> list[BackendPreferences]:
|
53
56
|
return [cls(backend_name=name, **kwargs) for name in backend_names]
|
54
57
|
|
55
58
|
def is_nvidia_backend(self) -> bool:
|
56
59
|
return False
|
57
60
|
|
58
61
|
|
59
|
-
AWS_DEFAULT_JOB_TIMEOUT_SECONDS = int(timedelta(minutes=5).total_seconds())
|
60
|
-
|
61
|
-
|
62
62
|
class AliceBobBackendPreferences(BackendPreferences):
|
63
|
-
|
64
|
-
|
65
|
-
|
63
|
+
"""
|
64
|
+
Backend preferences specific to Alice&Bob for quantum computing tasks.
|
65
|
+
|
66
|
+
This class includes configuration options for setting up a backend using Alice&Bob's quantum hardware.
|
67
|
+
It extends the base `BackendPreferences` class and provides additional parameters required for working
|
68
|
+
with Alice&Bob's cat qubits, including settings for photon dissipation rates, repetition code distance,
|
69
|
+
and the average number of photons.
|
70
|
+
|
71
|
+
Attributes:
|
72
|
+
backend_service_provider (ProviderTypeVendor.ALICE_BOB):
|
73
|
+
The service provider for the backend, which is Alice&Bob.
|
74
|
+
|
75
|
+
distance (Optional[int]):
|
76
|
+
The number of times information is duplicated in the repetition code.
|
77
|
+
- **Tooltip**: Phase-flip probability decreases exponentially with this parameter, bit-flip probability increases linearly.
|
78
|
+
- **Supported Values**: 3 to 300, though practical values are usually lower than 30.
|
79
|
+
- **Default**: None.
|
80
|
+
|
81
|
+
kappa_1 (Optional[float]):
|
82
|
+
The rate at which the cat qubit loses one photon, creating a bit-flip.
|
83
|
+
- **Tooltip**: Lower values mean lower error rates.
|
84
|
+
- **Supported Values**: 10 to 10^5. Current hardware is at ~10^3.
|
85
|
+
- **Default**: None.
|
86
|
+
|
87
|
+
kappa_2 (Optional[float]):
|
88
|
+
The rate at which the cat qubit is stabilized using two-photon dissipation.
|
89
|
+
- **Tooltip**: Higher values mean lower error rates.
|
90
|
+
- **Supported Values**: 100 to 10^9. Current hardware is at ~10^5.
|
91
|
+
- **Default**: None.
|
92
|
+
|
93
|
+
average_nb_photons (Optional[float]):
|
94
|
+
The average number of photons.
|
95
|
+
- **Tooltip**: Bit-flip probability decreases exponentially with this parameter, phase-flip probability increases linearly.
|
96
|
+
- **Supported Values**: 4 to 10^5, though practical values are usually lower than 30.
|
97
|
+
- **Default**: None.
|
98
|
+
|
99
|
+
api_key (str):
|
100
|
+
The API key required to access Alice&Bob's quantum hardware.
|
101
|
+
- **Required**: Yes.
|
102
|
+
|
103
|
+
For more details, refer to the [Alice&Bob Backend Documentation](https://docs.classiq.io/latest/reference-manual/executor/cloud-providers/alice-and-bob-backends/).
|
104
|
+
"""
|
105
|
+
|
106
|
+
backend_service_provider: ProviderTypeVendor.ALICE_BOB = pydantic.Field(
|
107
|
+
default=ProviderVendor.ALICE_AND_BOB
|
108
|
+
)
|
109
|
+
distance: Optional[int] = pydantic.Field(
|
110
|
+
default=None, description="Repetition code distance"
|
111
|
+
)
|
112
|
+
kappa_1: Optional[float] = pydantic.Field(
|
113
|
+
default=None, description="One-photon dissipation rate (Hz)"
|
114
|
+
)
|
115
|
+
kappa_2: Optional[float] = pydantic.Field(
|
116
|
+
default=None, description="Two-photon dissipation rate (Hz)"
|
117
|
+
)
|
118
|
+
average_nb_photons: Optional[float] = pydantic.Field(
|
119
|
+
default=None, description="Average number of photons"
|
120
|
+
)
|
121
|
+
api_key: Optional[pydantic_backend.PydanticAliceBobApiKeyType] = pydantic.Field(
|
122
|
+
default=None, description="AliceBob API key"
|
66
123
|
)
|
67
124
|
|
68
|
-
@
|
69
|
-
def
|
70
|
-
|
71
|
-
|
72
|
-
|
125
|
+
@property
|
126
|
+
def parameters(self) -> dict[str, Any]:
|
127
|
+
parameters = {
|
128
|
+
"distance": self.distance,
|
129
|
+
"kappa1": self.kappa_1,
|
130
|
+
"kappa2": self.kappa_2,
|
131
|
+
"averageNbPhotons": self.average_nb_photons,
|
132
|
+
}
|
133
|
+
return {k: v for k, v in parameters.items() if v is not None}
|
134
|
+
|
135
|
+
@pydantic.field_validator("api_key", mode="after")
|
136
|
+
@classmethod
|
137
|
+
def _validate_api_key(cls, api_key: Optional[str]) -> Optional[str]:
|
138
|
+
if api_key is not None:
|
139
|
+
warnings.warn(
|
140
|
+
"API key is no longer required for Alice&Bob backends.",
|
141
|
+
ClassiqDeprecationWarning,
|
142
|
+
stacklevel=2,
|
143
|
+
)
|
144
|
+
return api_key
|
73
145
|
|
74
146
|
|
75
147
|
class ClassiqBackendPreferences(BackendPreferences):
|
76
|
-
|
148
|
+
"""
|
149
|
+
Represents backend preferences specific to Classiq quantum computing targets.
|
77
150
|
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
151
|
+
This class is used to configure the backend options for executing quantum circuits on Classiq's platform.
|
152
|
+
The relevant backend names for Classiq targets are specified in `ClassiqSimulatorBackendNames` & `ClassiqNvidiaBackendNames`.
|
153
|
+
|
154
|
+
For more details, refer to the [Classiq Backend Documentation](https://docs.classiq.io/latest/reference-manual/executor/cloud-providers/classiq-backends/).
|
155
|
+
"""
|
156
|
+
|
157
|
+
backend_service_provider: ProviderTypeVendor.CLASSIQ = pydantic.Field(
|
158
|
+
default=ProviderVendor.CLASSIQ
|
159
|
+
)
|
83
160
|
|
84
161
|
def is_nvidia_backend(self) -> bool:
|
85
162
|
return self.backend_name in list(ClassiqNvidiaBackendNames)
|
86
163
|
|
164
|
+
# CAD-25390
|
165
|
+
@pydantic.field_validator("backend_name")
|
166
|
+
@classmethod
|
167
|
+
def _validate_nvidia_name_backwards_compatibility(cls, backend_name: str) -> str:
|
168
|
+
if backend_name == "nvidia_state_vector_simulator":
|
169
|
+
warnings.warn(
|
170
|
+
"The name 'nvidia_state_vector_simulator' is deprecated and "
|
171
|
+
"will be removed soon, no earlier than January 12th 2025. "
|
172
|
+
"Please use ClassiqNvidiaBackendNames.SIMULATOR instead",
|
173
|
+
ClassiqDeprecationWarning,
|
174
|
+
stacklevel=2,
|
175
|
+
)
|
176
|
+
return backend_name
|
177
|
+
|
87
178
|
|
88
179
|
class AwsBackendPreferences(BackendPreferences):
|
89
|
-
|
90
|
-
|
91
|
-
|
180
|
+
"""
|
181
|
+
AWS-specific backend preferences for quantum computing tasks using Amazon Braket.
|
182
|
+
|
183
|
+
This class contains configuration options specific to Amazon Braket, including the AWS role
|
184
|
+
ARN, S3 bucket details, and the folder path within the S3 bucket. It extends the base
|
185
|
+
`BackendPreferences` class to provide additional properties required for interaction with
|
186
|
+
Amazon Braket.
|
187
|
+
|
188
|
+
Attributes:
|
189
|
+
backend_service_provider (ProviderTypeVendor.AMAZON_BRAKET):
|
190
|
+
The service provider for the backend, which is Amazon Braket.
|
191
|
+
|
192
|
+
aws_role_arn (pydantic_backend.PydanticAwsRoleArn):
|
193
|
+
The Amazon Resource Name (ARN) of the role that will be assumed for execution
|
194
|
+
on your Braket account. This is a required field and should be provided to allow
|
195
|
+
secure and authorized access to AWS resources.
|
196
|
+
|
197
|
+
s3_bucket_name (str):
|
198
|
+
The name of the S3 bucket where results and other related data will be stored.
|
199
|
+
This field should contain a valid S3 bucket name under your AWS account.
|
200
|
+
|
201
|
+
s3_folder (pydantic_backend.PydanticS3BucketKey):
|
202
|
+
The folder path within the specified S3 bucket. This allows for organizing
|
203
|
+
results and data under a specific directory within the S3 bucket.
|
204
|
+
|
205
|
+
|
206
|
+
For more details, refer to:
|
207
|
+
[AwsBackendPreferences examples](https://docs.classiq.io/latest/reference-manual/executor/cloud-providers/amazon-backends/?h=awsbackend#usage)
|
208
|
+
"""
|
209
|
+
|
210
|
+
backend_service_provider: ProviderTypeVendor.AMAZON_BRAKET = pydantic.Field(
|
211
|
+
default=ProviderVendor.AMAZON_BRAKET
|
92
212
|
)
|
93
|
-
|
94
|
-
|
95
|
-
description="
|
213
|
+
aws_role_arn: Optional[str] = pydantic.Field(
|
214
|
+
default=None,
|
215
|
+
description="ARN of the role to be assumed for execution on your Braket account.",
|
216
|
+
)
|
217
|
+
s3_bucket_name: Optional[str] = pydantic.Field(
|
218
|
+
default=None, description="S3 Bucket Name"
|
96
219
|
)
|
97
|
-
|
98
|
-
description="
|
99
|
-
|
220
|
+
s3_folder: Optional[str] = pydantic.Field(
|
221
|
+
default=None, description="S3 Folder Path Within The S3 Bucket"
|
222
|
+
)
|
223
|
+
run_through_classiq: bool = pydantic.Field(
|
224
|
+
default=False,
|
225
|
+
description="Run through Classiq's credentials while using user's allocated budget.",
|
100
226
|
)
|
101
227
|
|
102
|
-
@validator("s3_bucket_name")
|
103
|
-
def _validate_s3_bucket_name(
|
104
|
-
cls, s3_bucket_name: str, values: Dict[str, Any]
|
105
|
-
) -> str:
|
106
|
-
s3_bucket_name = s3_bucket_name.strip()
|
107
|
-
if not s3_bucket_name.startswith("amazon-braket-"):
|
108
|
-
raise ClassiqValueError('S3 bucket name should start with "amazon-braket-"')
|
109
|
-
return s3_bucket_name
|
110
228
|
|
111
|
-
|
112
|
-
|
113
|
-
return values_with_discriminator(
|
114
|
-
values, "backend_service_provider", ProviderVendor.AMAZON_BRAKET
|
115
|
-
)
|
229
|
+
class IBMBackendProvider(BaseModel):
|
230
|
+
"""
|
116
231
|
|
232
|
+
Represents the provider specs for identifying an IBM Quantum backend.
|
233
|
+
|
234
|
+
Attributes:
|
235
|
+
hub (str): hub parameter of IBM Quantum provider. Defaults to `"ibm-q"`.
|
236
|
+
group (str): group parameter of IBM Quantum provider. Defaults to `"open"`.
|
237
|
+
project (str): project parameter of IBM Quantum provider. Defaults to `"main"`.
|
238
|
+
|
239
|
+
"""
|
117
240
|
|
118
|
-
class IBMBackendProvider(BaseModel):
|
119
241
|
hub: str = "ibm-q"
|
120
242
|
group: str = "open"
|
121
243
|
project: str = "main"
|
122
244
|
|
123
245
|
|
124
246
|
class IBMBackendPreferences(BackendPreferences):
|
125
|
-
|
247
|
+
"""
|
248
|
+
Represents the backend preferences specific to IBM Quantum services.
|
249
|
+
|
250
|
+
Inherits from `BackendPreferences` and adds additional fields and validations
|
251
|
+
specific to IBM Quantum backends.
|
252
|
+
|
253
|
+
Attributes:
|
254
|
+
backend_service_provider (ProviderTypeVendor.IBM_QUANTUM): Indicates the backend service provider as IBM Quantum.
|
255
|
+
access_token (Optional[str]): The IBM Quantum access token to be used with IBM Quantum hosted backends. Defaults to `None`.
|
256
|
+
provider (IBMBackendProvider): Specifications for identifying a single IBM Quantum provider. Defaults to a new `IBMBackendProvider`.
|
257
|
+
qctrl_api_key (Optional[str]): QCTRL API key to access QCTRL optimization abilities.
|
258
|
+
run_through_classiq (bool): Run through Classiq's credentials. Defaults to `False`.
|
259
|
+
|
260
|
+
See examples in the [IBM Quantum Backend Documentation](https://docs.classiq.io/latest/reference-manual/executor/cloud-providers/ibm-backends/?h=).
|
261
|
+
"""
|
262
|
+
|
263
|
+
backend_service_provider: ProviderTypeVendor.IBM_QUANTUM = pydantic.Field(
|
264
|
+
default=ProviderVendor.IBM_QUANTUM
|
265
|
+
)
|
126
266
|
access_token: Optional[str] = pydantic.Field(
|
127
267
|
default=None,
|
128
268
|
description="IBM Quantum access token to be used"
|
@@ -132,15 +272,28 @@ class IBMBackendPreferences(BackendPreferences):
|
|
132
272
|
default_factory=IBMBackendProvider,
|
133
273
|
description="Provider specs. for identifying a single IBM Quantum provider.",
|
134
274
|
)
|
275
|
+
qctrl_api_key: Optional[str] = pydantic.Field(
|
276
|
+
default=None,
|
277
|
+
description="QCTRL API key to access QCTRL optimization abilities",
|
278
|
+
)
|
279
|
+
run_through_classiq: bool = pydantic.Field(
|
280
|
+
default=False,
|
281
|
+
description="Run through Classiq's credentials",
|
282
|
+
)
|
135
283
|
|
136
|
-
@pydantic.root_validator(pre=True)
|
137
|
-
def _set_backend_service_provider(cls, values: Dict[str, Any]) -> Dict[str, Any]:
|
138
|
-
return values_with_discriminator(
|
139
|
-
values, "backend_service_provider", ProviderVendor.IBM_QUANTUM
|
140
|
-
)
|
141
284
|
|
285
|
+
class AzureCredential(BaseSettings):
|
286
|
+
"""
|
287
|
+
Represents the credentials and configuration required to authenticate with Azure services.
|
288
|
+
|
289
|
+
Attributes:
|
290
|
+
tenant_id (str): Azure Tenant ID used to identify the directory in which the application is registered.
|
291
|
+
client_id (str): Azure Client ID, also known as the application ID, which is used to authenticate the application.
|
292
|
+
client_secret (str): Azure Client Secret associated with the application, used for authentication.
|
293
|
+
resource_id (pydantic_backend.PydanticAzureResourceIDType): Azure Resource ID, including the subscription ID,
|
294
|
+
resource group, and workspace, typically used for personal resources.
|
295
|
+
"""
|
142
296
|
|
143
|
-
class AzureCredential(pydantic.BaseSettings):
|
144
297
|
tenant_id: str = pydantic.Field(description="Azure Tenant ID")
|
145
298
|
client_id: str = pydantic.Field(description="Azure Client ID")
|
146
299
|
client_secret: str = pydantic.Field(description="Azure Client Secret")
|
@@ -148,15 +301,39 @@ class AzureCredential(pydantic.BaseSettings):
|
|
148
301
|
description="Azure Resource ID (including Azure subscription ID, resource "
|
149
302
|
"group and workspace), for personal resource",
|
150
303
|
)
|
304
|
+
model_config = SettingsConfigDict(
|
305
|
+
title="Azure Service Principal Credential",
|
306
|
+
env_prefix="AZURE_",
|
307
|
+
case_sensitive=False,
|
308
|
+
extra="allow",
|
309
|
+
)
|
151
310
|
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
311
|
+
def __init__(self, **data: Any) -> None:
|
312
|
+
initial_data = {
|
313
|
+
field: data[field] for field in data if field in self.model_fields
|
314
|
+
}
|
315
|
+
super().__init__(**data)
|
316
|
+
for field, value in initial_data.items():
|
317
|
+
setattr(self, field, value)
|
156
318
|
|
157
319
|
|
158
320
|
class AzureBackendPreferences(BackendPreferences):
|
159
|
-
|
321
|
+
"""
|
322
|
+
This class inherits from BackendPreferences.
|
323
|
+
This is where you specify Azure Quantum preferences.
|
324
|
+
See usage in the [Azure Backend Documentation](https://docs.classiq.io/latest/reference-manual/executor/cloud-providers/azure-backends/).
|
325
|
+
|
326
|
+
Attributes:
|
327
|
+
location (str): Azure personal resource region. Defaults to `"East US"`.
|
328
|
+
credentials (Optional[AzureCredential]): The service principal credential to access personal quantum workspace. Defaults to `None`.
|
329
|
+
ionq_error_mitigation_flag (Optional[bool]): Error mitigation configuration upon running on IonQ through Azure. Defaults to `False`.
|
330
|
+
|
331
|
+
|
332
|
+
"""
|
333
|
+
|
334
|
+
backend_service_provider: ProviderTypeVendor.AZURE_QUANTUM = pydantic.Field(
|
335
|
+
default=ProviderVendor.AZURE_QUANTUM
|
336
|
+
)
|
160
337
|
|
161
338
|
location: str = pydantic.Field(
|
162
339
|
default="East US", description="Azure personal resource region"
|
@@ -167,53 +344,151 @@ class AzureBackendPreferences(BackendPreferences):
|
|
167
344
|
description="The service principal credential to access personal quantum workspace",
|
168
345
|
)
|
169
346
|
|
347
|
+
ionq_error_mitigation_flag: Optional[bool] = pydantic.Field(
|
348
|
+
default=False,
|
349
|
+
description="Error mitigation configuration upon running on IonQ through Azure.",
|
350
|
+
)
|
351
|
+
|
170
352
|
@property
|
171
353
|
def run_through_classiq(self) -> bool:
|
172
|
-
|
354
|
+
"""
|
355
|
+
|
356
|
+
Returns: `True` if there are no Azure Credentials.
|
357
|
+
Therefore you will be running through Classiq's credentials.
|
173
358
|
|
174
|
-
|
175
|
-
|
176
|
-
return values_with_discriminator(
|
177
|
-
values, "backend_service_provider", ProviderVendor.AZURE_QUANTUM
|
178
|
-
)
|
359
|
+
"""
|
360
|
+
return self.credentials is None
|
179
361
|
|
180
362
|
|
181
363
|
class IonqBackendPreferences(BackendPreferences):
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
364
|
+
"""
|
365
|
+
Represents the backend preferences specific to IonQ services.
|
366
|
+
|
367
|
+
Inherits from `BackendPreferences` and adds additional fields and configurations
|
368
|
+
specific to IonQ backends
|
369
|
+
|
370
|
+
Attributes:
|
371
|
+
backend_service_provider (ProviderTypeVendor.IONQ): Indicates the backend service provider as IonQ.
|
372
|
+
api_key (PydanticIonQApiKeyType): The IonQ API key required for accessing IonQ's quantum computing services.
|
373
|
+
error_mitigation (bool): A configuration option to enable or disable error mitigation during execution. Defaults to `False`.
|
374
|
+
run_through_classiq (bool): Running through Classiq's credentials while using user's allocated budget.
|
186
375
|
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
376
|
+
See examples in the [IonQ Backend Documentation](https://docs.classiq.io/latest/reference-manual/executor/cloud-providers/ionq-backends/?h=).
|
377
|
+
"""
|
378
|
+
|
379
|
+
backend_service_provider: ProviderTypeVendor.IONQ = pydantic.Field(
|
380
|
+
default=ProviderVendor.IONQ
|
381
|
+
)
|
382
|
+
api_key: Optional[pydantic_backend.PydanticIonQApiKeyType] = pydantic.Field(
|
383
|
+
default=None, description="IonQ API key"
|
384
|
+
)
|
385
|
+
error_mitigation: bool = pydantic.Field(
|
386
|
+
default=False,
|
387
|
+
description="Error mitigation configuration.",
|
388
|
+
)
|
389
|
+
run_through_classiq: bool = pydantic.Field(
|
390
|
+
default=False,
|
391
|
+
description="Running through Classiq's credentials while using user's allocated budget.",
|
392
|
+
)
|
192
393
|
|
193
394
|
|
194
395
|
class GCPBackendPreferences(BackendPreferences):
|
195
|
-
|
396
|
+
"""
|
397
|
+
Represents the backend preferences specific to Google Cloud Platform (GCP) services.
|
398
|
+
|
399
|
+
Inherits from `BackendPreferences` and sets the backend service provider to Google.
|
400
|
+
|
401
|
+
Attributes:
|
402
|
+
backend_service_provider (ProviderTypeVendor.GOOGLE): Indicates the backend service provider as Google,
|
403
|
+
specifically for quantum computing services on Google Cloud Platform (GCP).
|
196
404
|
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
405
|
+
See examples in the [Google Cloud Backend Documentation](https://docs.classiq.io/latest/reference-manual/executor/cloud-providers/google-backends/?h=).
|
406
|
+
"""
|
407
|
+
|
408
|
+
backend_service_provider: ProviderTypeVendor.GOOGLE = pydantic.Field(
|
409
|
+
default=ProviderVendor.GOOGLE
|
410
|
+
)
|
202
411
|
|
203
412
|
def is_nvidia_backend(self) -> bool:
|
204
413
|
return True
|
205
414
|
|
206
415
|
|
207
416
|
class OQCBackendPreferences(BackendPreferences):
|
208
|
-
|
417
|
+
"""
|
418
|
+
|
419
|
+
This class inherits from `BackendPreferences`.
|
420
|
+
This is where you specify OQC preferences.
|
421
|
+
|
422
|
+
Attributes:
|
423
|
+
username (str): OQC username
|
424
|
+
password (str): OQC password
|
425
|
+
"""
|
426
|
+
|
427
|
+
backend_service_provider: ProviderTypeVendor.OQC = pydantic.Field(
|
428
|
+
default=ProviderVendor.OQC
|
429
|
+
)
|
209
430
|
username: str = pydantic.Field(description="OQC username")
|
210
431
|
password: str = pydantic.Field(description="OQC password")
|
211
432
|
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
433
|
+
|
434
|
+
class IntelBackendPreferences(BackendPreferences):
|
435
|
+
"""
|
436
|
+
Represents backend preferences specific to Classiq quantum computing targets.
|
437
|
+
|
438
|
+
This class is used to configure the backend options for executing quantum circuits on Classiq's platform.
|
439
|
+
The relevant backend names for Classiq targets are specified in `ClassiqSimulatorBackendNames` & `ClassiqNvidiaBackendNames`.
|
440
|
+
|
441
|
+
For more details, refer to the [Classiq Backend Documentation](https://docs.classiq.io/latest/reference-manual/executor/cloud-providers/classiq-backends/).
|
442
|
+
"""
|
443
|
+
|
444
|
+
backend_service_provider: ProviderTypeVendor.INTEL = pydantic.Field(
|
445
|
+
default=ProviderVendor.INTEL
|
446
|
+
)
|
447
|
+
|
448
|
+
|
449
|
+
class AQTBackendPreferences(BackendPreferences):
|
450
|
+
"""
|
451
|
+
NOTE: This is a work in progress and is subject to change.
|
452
|
+
|
453
|
+
Represents the backend preferences specific to AQT (Alpine Quantum Technologies).
|
454
|
+
|
455
|
+
Attributes:
|
456
|
+
api_key: The API key required to access AQT's quantum computing services.
|
457
|
+
workspace: The AQT workspace where the simulator/hardware is located.
|
458
|
+
"""
|
459
|
+
|
460
|
+
backend_service_provider: ProviderTypeVendor.AQT = pydantic.Field(
|
461
|
+
default=ProviderVendor.AQT
|
462
|
+
)
|
463
|
+
api_key: str = pydantic.Field(description="AQT API key")
|
464
|
+
workspace: str = pydantic.Field(description="AQT workspace")
|
465
|
+
|
466
|
+
|
467
|
+
class IQCCBackendPreferences(BackendPreferences):
|
468
|
+
"""
|
469
|
+
NOTE: This is a work in progress and is subject to change.
|
470
|
+
|
471
|
+
Represents the backend preferences specific to IQCC (Israeli Quantum Computing
|
472
|
+
Center).
|
473
|
+
|
474
|
+
Attributes:
|
475
|
+
auth_token: The authorization token generated by calling `generate_iqcc_token`.
|
476
|
+
target_id: The target ID of the login node.
|
477
|
+
target_scope_id: The scope ID of the specified target.
|
478
|
+
ssh_user_name: The user name to use when connecting to the SSH server on the login node.
|
479
|
+
ssh_key: The private key to use when connecting to the SSH server on the login node.
|
480
|
+
slurm_account: The account to use when initiating SLURM jobs.
|
481
|
+
"""
|
482
|
+
|
483
|
+
backend_service_provider: ProviderTypeVendor.IQCC = pydantic.Field(
|
484
|
+
default=ProviderVendor.IQCC
|
485
|
+
)
|
486
|
+
auth_token: str
|
487
|
+
target_id: str
|
488
|
+
target_scope_id: str
|
489
|
+
ssh_user_name: str
|
490
|
+
ssh_key: str
|
491
|
+
slurm_account: str
|
217
492
|
|
218
493
|
|
219
494
|
def is_exact_simulator(backend_preferences: BackendPreferences) -> bool:
|
@@ -221,13 +496,13 @@ def is_exact_simulator(backend_preferences: BackendPreferences) -> bool:
|
|
221
496
|
|
222
497
|
|
223
498
|
def default_backend_preferences(
|
224
|
-
backend_name: str =
|
499
|
+
backend_name: str = ClassiqSimulatorBackendNames.SIMULATOR,
|
225
500
|
) -> BackendPreferences:
|
226
501
|
return ClassiqBackendPreferences(backend_name=backend_name)
|
227
502
|
|
228
503
|
|
229
504
|
def backend_preferences_field(
|
230
|
-
backend_name: str =
|
505
|
+
backend_name: str = ClassiqSimulatorBackendNames.SIMULATOR,
|
231
506
|
) -> Any:
|
232
507
|
return pydantic.Field(
|
233
508
|
default_factory=lambda: default_backend_preferences(backend_name),
|
@@ -245,37 +520,31 @@ BackendPreferencesTypes = Union[
|
|
245
520
|
GCPBackendPreferences,
|
246
521
|
AliceBobBackendPreferences,
|
247
522
|
OQCBackendPreferences,
|
523
|
+
IntelBackendPreferences,
|
524
|
+
AQTBackendPreferences,
|
525
|
+
IQCCBackendPreferences,
|
248
526
|
]
|
249
527
|
|
250
528
|
__all__ = [
|
529
|
+
"AQTBackendPreferences",
|
530
|
+
"AliceBobBackendNames",
|
531
|
+
"AliceBobBackendPreferences",
|
532
|
+
"AmazonBraketBackendNames",
|
533
|
+
"AwsBackendPreferences",
|
251
534
|
"AzureBackendPreferences",
|
252
535
|
"AzureCredential",
|
253
536
|
"AzureQuantumBackendNames",
|
254
537
|
"ClassiqBackendPreferences",
|
255
|
-
"
|
538
|
+
"ClassiqNvidiaBackendNames",
|
539
|
+
"ClassiqSimulatorBackendNames",
|
540
|
+
"GCPBackendPreferences",
|
256
541
|
"IBMBackendPreferences",
|
257
542
|
"IBMBackendProvider",
|
258
|
-
"
|
259
|
-
"
|
260
|
-
"
|
543
|
+
"IQCCBackendPreferences",
|
544
|
+
"IntelBackendNames",
|
545
|
+
"IntelBackendPreferences",
|
261
546
|
"IonqBackendNames",
|
262
|
-
"
|
263
|
-
"GCPBackendPreferences",
|
264
|
-
"AliceBobBackendPreferences",
|
265
|
-
"AliceBobBackendNames",
|
266
|
-
"OQCBackendPreferences",
|
547
|
+
"IonqBackendPreferences",
|
267
548
|
"OQCBackendNames",
|
549
|
+
"OQCBackendPreferences",
|
268
550
|
]
|
269
|
-
|
270
|
-
|
271
|
-
def validate_backend_service_provider(backend_service_provider: Any) -> Provider:
|
272
|
-
if isinstance(backend_service_provider, Provider):
|
273
|
-
return backend_service_provider
|
274
|
-
if isinstance(backend_service_provider, str):
|
275
|
-
for member in Provider:
|
276
|
-
if member.lower() == backend_service_provider.lower():
|
277
|
-
return Provider(member)
|
278
|
-
raise ClassiqValueError(
|
279
|
-
f"""Vendor {backend_service_provider} is not supported.
|
280
|
-
The supported providers are {', '.join(Provider)}."""
|
281
|
-
)
|