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
classiq/__init__.py
CHANGED
@@ -1,8 +1,5 @@
|
|
1
1
|
"""Classiq SDK."""
|
2
2
|
|
3
|
-
import sys
|
4
|
-
from typing import List
|
5
|
-
|
6
3
|
from classiq.interface._version import VERSION as _VERSION
|
7
4
|
from classiq.interface.generator.application_apis import * # noqa: F403
|
8
5
|
from classiq.interface.generator.arith.register_user_input import (
|
@@ -10,21 +7,13 @@ from classiq.interface.generator.arith.register_user_input import (
|
|
10
7
|
RegisterUserInput,
|
11
8
|
)
|
12
9
|
from classiq.interface.generator.control_state import ControlState
|
13
|
-
from classiq.interface.generator.expressions.enums.pauli import Pauli
|
14
10
|
from classiq.interface.generator.functions import * # noqa: F403
|
15
|
-
from classiq.interface.generator.
|
11
|
+
from classiq.interface.generator.model import * # noqa: F403
|
12
|
+
from classiq.interface.generator.model import __all__ as _md_all
|
16
13
|
from classiq.interface.generator.quantum_program import QuantumProgram
|
17
|
-
from classiq.interface.ide.show import show
|
18
14
|
|
19
|
-
from classiq import
|
20
|
-
|
21
|
-
builtin_functions,
|
22
|
-
exceptions,
|
23
|
-
execution,
|
24
|
-
model,
|
25
|
-
synthesis,
|
26
|
-
)
|
27
|
-
from classiq._internals import _qfunc_ext, logger
|
15
|
+
from classiq import applications, execution, synthesis
|
16
|
+
from classiq._internals import logger
|
28
17
|
from classiq._internals.async_utils import (
|
29
18
|
enable_jupyter_notebook,
|
30
19
|
is_notebook as _is_notebook,
|
@@ -34,31 +23,56 @@ from classiq._internals.client import configure
|
|
34
23
|
from classiq._internals.config import Configuration
|
35
24
|
from classiq._internals.help import open_help
|
36
25
|
from classiq.analyzer import Analyzer
|
37
|
-
from classiq.
|
38
|
-
|
39
|
-
|
26
|
+
from classiq.applications.chemistry import (
|
27
|
+
construct_chemistry_model,
|
28
|
+
molecule_problem_to_qmod,
|
29
|
+
)
|
30
|
+
from classiq.applications.combinatorial_optimization import (
|
31
|
+
CombinatorialProblem,
|
32
|
+
compute_qaoa_initial_point,
|
33
|
+
construct_combinatorial_optimization_model,
|
34
|
+
execute_qaoa,
|
35
|
+
pyo_model_to_hamiltonian,
|
40
36
|
)
|
37
|
+
from classiq.applications.finance import construct_finance_model
|
38
|
+
from classiq.applications.grover import construct_grover_model
|
39
|
+
from classiq.applications.hamiltonian.pauli_decomposition import (
|
40
|
+
hamiltonian_to_matrix,
|
41
|
+
matrix_to_hamiltonian,
|
42
|
+
)
|
43
|
+
from classiq.applications.qsvm import construct_qsvm_model
|
41
44
|
from classiq.executor import (
|
42
45
|
execute,
|
43
46
|
execute_async,
|
44
47
|
set_quantum_program_execution_preferences,
|
45
48
|
)
|
46
|
-
from classiq.
|
47
|
-
from classiq.
|
49
|
+
from classiq.open_library import * # noqa: F403
|
50
|
+
from classiq.open_library import __all__ as _open_library_all
|
48
51
|
from classiq.qmod import * # noqa: F403
|
49
52
|
from classiq.qmod import __all__ as _qmod_all
|
50
|
-
from classiq.quantum_functions import * # noqa: F403
|
51
|
-
from classiq.quantum_functions import __all__ as _qfuncs_all
|
52
|
-
from classiq.quantum_register import * # noqa: F403
|
53
|
-
from classiq.quantum_register import __all__ as _qregs_all
|
54
53
|
from classiq.synthesis import (
|
54
|
+
quantum_program_from_qasm,
|
55
|
+
quantum_program_from_qasm_async,
|
55
56
|
set_constraints,
|
56
57
|
set_execution_preferences,
|
57
58
|
set_preferences,
|
59
|
+
show,
|
58
60
|
synthesize,
|
59
61
|
synthesize_async,
|
62
|
+
update_constraints,
|
63
|
+
update_execution_preferences,
|
64
|
+
update_preferences,
|
60
65
|
)
|
61
66
|
|
67
|
+
_application_constructors_all = [
|
68
|
+
"construct_qsvm_model",
|
69
|
+
"construct_combinatorial_optimization_model",
|
70
|
+
"construct_chemistry_model",
|
71
|
+
"construct_finance_model",
|
72
|
+
"construct_grover_model",
|
73
|
+
"molecule_problem_to_qmod",
|
74
|
+
]
|
75
|
+
|
62
76
|
__version__ = _VERSION
|
63
77
|
|
64
78
|
if _is_notebook():
|
@@ -67,10 +81,7 @@ if _is_notebook():
|
|
67
81
|
_sub_modules = [
|
68
82
|
"analyzer",
|
69
83
|
"applications",
|
70
|
-
"builtin_functions",
|
71
|
-
"exceptions",
|
72
84
|
"execution",
|
73
|
-
"model",
|
74
85
|
"open_help",
|
75
86
|
"qmod",
|
76
87
|
"synthesis",
|
@@ -91,19 +102,23 @@ __all__ = (
|
|
91
102
|
"set_preferences",
|
92
103
|
"set_constraints",
|
93
104
|
"set_execution_preferences",
|
105
|
+
"update_preferences",
|
106
|
+
"update_constraints",
|
107
|
+
"update_execution_preferences",
|
94
108
|
"set_quantum_program_execution_preferences",
|
95
109
|
"show",
|
96
|
-
"
|
110
|
+
"hamiltonian_to_matrix",
|
111
|
+
"matrix_to_hamiltonian",
|
112
|
+
"quantum_program_from_qasm",
|
113
|
+
"quantum_program_from_qasm_async",
|
97
114
|
]
|
98
|
-
+ _qregs_all
|
99
|
-
+ _qfuncs_all
|
100
115
|
+ _md_all
|
101
|
-
+ _ifunc_all
|
102
116
|
+ _sub_modules
|
103
117
|
+ _application_constructors_all
|
104
118
|
+ _qmod_all
|
119
|
+
+ _open_library_all
|
105
120
|
)
|
106
121
|
|
107
122
|
|
108
|
-
def __dir__() ->
|
123
|
+
def __dir__() -> list[str]:
|
109
124
|
return __all__
|
@@ -1,39 +1,39 @@
|
|
1
1
|
import json
|
2
|
-
from typing import
|
2
|
+
from typing import Any, Optional, Protocol, TypeVar
|
3
3
|
|
4
|
+
import httpx
|
4
5
|
import pydantic
|
5
6
|
|
6
7
|
import classiq.interface.executor.execution_result
|
7
8
|
import classiq.interface.pyomo_extension
|
8
9
|
from classiq.interface.analyzer import analysis_params, result as analysis_result
|
9
10
|
from classiq.interface.analyzer.analysis_params import AnalysisRBParams
|
11
|
+
from classiq.interface.analyzer.result import GraphStatus
|
10
12
|
from classiq.interface.chemistry import ground_state_problem, operator
|
13
|
+
from classiq.interface.enum_utils import StrEnum
|
14
|
+
from classiq.interface.exceptions import ClassiqAPIError, ClassiqValueError
|
15
|
+
from classiq.interface.execution.iqcc import (
|
16
|
+
IQCCInitAuthData,
|
17
|
+
IQCCInitAuthResponse,
|
18
|
+
IQCCProbeAuthData,
|
19
|
+
IQCCProbeAuthResponse,
|
20
|
+
)
|
11
21
|
from classiq.interface.execution.jobs import (
|
12
22
|
ExecutionJobDetailsV1,
|
13
23
|
ExecutionJobsQueryResultsV1,
|
14
24
|
)
|
15
|
-
from classiq.interface.
|
25
|
+
from classiq.interface.execution.primitives import PrimitivesInput
|
26
|
+
from classiq.interface.executor import execution_request
|
16
27
|
from classiq.interface.generator import quantum_program as generator_result
|
17
|
-
from classiq.interface.
|
18
|
-
|
19
|
-
|
20
|
-
JobDescriptionSuccess,
|
21
|
-
JobID,
|
22
|
-
JSONObject,
|
23
|
-
)
|
24
|
-
from classiq.interface.model.common_model_types import ModelInput
|
28
|
+
from classiq.interface.hardware import HardwareInformation, Provider
|
29
|
+
from classiq.interface.jobs import JobDescription, JobID, JSONObject
|
30
|
+
from classiq.interface.model.model import Model
|
25
31
|
from classiq.interface.server import routes
|
26
32
|
|
27
33
|
from classiq._internals.client import client
|
28
|
-
from classiq._internals.enum_utils import StrEnum
|
29
34
|
from classiq._internals.jobs import JobPoller
|
30
|
-
from classiq.exceptions import ClassiqAPIError, ClassiqValueError
|
31
35
|
|
32
36
|
ResultType = TypeVar("ResultType", bound=pydantic.BaseModel)
|
33
|
-
CLASSIQ_ACCEPT_HEADER = "X-Classiq-Accept-Version"
|
34
|
-
|
35
|
-
_ACCEPT_HEADER = "X-Classiq-Accept-Version"
|
36
|
-
_CONTENT_TYPE_HEADER = "X-Classiq-Content-Type-Version"
|
37
37
|
|
38
38
|
|
39
39
|
class HTTPMethod(StrEnum):
|
@@ -41,6 +41,7 @@ class HTTPMethod(StrEnum):
|
|
41
41
|
GET = "GET"
|
42
42
|
POST = "POST"
|
43
43
|
PATCH = "PATCH"
|
44
|
+
PUT = "PUT"
|
44
45
|
|
45
46
|
|
46
47
|
class StatusType(Protocol):
|
@@ -48,13 +49,13 @@ class StatusType(Protocol):
|
|
48
49
|
|
49
50
|
|
50
51
|
def _parse_job_response(
|
51
|
-
job_result:
|
52
|
-
output_type:
|
52
|
+
job_result: JobDescription[JSONObject],
|
53
|
+
output_type: type[ResultType],
|
53
54
|
) -> ResultType:
|
54
|
-
if
|
55
|
-
return output_type.
|
56
|
-
if
|
57
|
-
raise ClassiqAPIError(job_result.
|
55
|
+
if job_result.result is not None:
|
56
|
+
return output_type.model_validate(job_result.result)
|
57
|
+
if job_result.failure_details:
|
58
|
+
raise ClassiqAPIError(job_result.failure_details)
|
58
59
|
|
59
60
|
raise ClassiqAPIError("Unexpected response from server")
|
60
61
|
|
@@ -67,13 +68,18 @@ class ApiWrapper:
|
|
67
68
|
url: str,
|
68
69
|
model: pydantic.BaseModel,
|
69
70
|
use_versioned_url: bool = True,
|
71
|
+
http_client: Optional[httpx.AsyncClient] = None,
|
70
72
|
) -> dict:
|
71
73
|
# TODO: we can't use model.dict() - it doesn't serialize complex class.
|
72
74
|
# This was added because JSON serializer doesn't serialize complex type, and pydantic does.
|
73
75
|
# We should add support for smarter json serialization.
|
74
|
-
body = json.loads(model.
|
76
|
+
body = json.loads(model.model_dump_json())
|
75
77
|
return await cls._call_task(
|
76
|
-
http_method,
|
78
|
+
http_method,
|
79
|
+
url,
|
80
|
+
body,
|
81
|
+
use_versioned_url=use_versioned_url,
|
82
|
+
http_client=http_client,
|
77
83
|
)
|
78
84
|
|
79
85
|
@classmethod
|
@@ -81,80 +87,121 @@ class ApiWrapper:
|
|
81
87
|
cls,
|
82
88
|
http_method: str,
|
83
89
|
url: str,
|
84
|
-
body: Optional[
|
85
|
-
params: Optional[
|
90
|
+
body: Optional[dict] = None,
|
91
|
+
params: Optional[dict] = None,
|
86
92
|
use_versioned_url: bool = True,
|
87
|
-
headers: Optional[
|
93
|
+
headers: Optional[dict[str, str]] = None,
|
94
|
+
allow_none: bool = False,
|
95
|
+
http_client: Optional[httpx.AsyncClient] = None,
|
88
96
|
) -> dict:
|
89
|
-
res = await client().call_api(
|
97
|
+
res: Any = await client().call_api(
|
90
98
|
http_method=http_method,
|
91
99
|
url=url,
|
92
100
|
body=body,
|
93
101
|
headers=headers,
|
94
102
|
params=params,
|
95
103
|
use_versioned_url=use_versioned_url,
|
104
|
+
http_client=http_client,
|
96
105
|
)
|
106
|
+
if allow_none and res is None:
|
107
|
+
return {}
|
97
108
|
if not isinstance(res, dict):
|
98
109
|
raise ClassiqValueError(f"Unexpected returned value: {res}")
|
99
110
|
return res
|
100
111
|
|
101
112
|
@classmethod
|
102
113
|
async def call_generation_task(
|
103
|
-
cls,
|
114
|
+
cls,
|
115
|
+
model: Model,
|
116
|
+
http_client: Optional[httpx.AsyncClient] = None,
|
104
117
|
) -> generator_result.QuantumProgram:
|
105
118
|
poller = JobPoller(base_url=routes.TASKS_GENERATE_FULL_PATH)
|
106
|
-
result = await poller.run_pydantic(
|
119
|
+
result = await poller.run_pydantic(
|
120
|
+
model, timeout_sec=None, http_client=http_client
|
121
|
+
)
|
107
122
|
return _parse_job_response(result, generator_result.QuantumProgram)
|
108
123
|
|
109
124
|
@classmethod
|
110
|
-
async def
|
111
|
-
cls,
|
125
|
+
async def call_create_execution_session(
|
126
|
+
cls,
|
127
|
+
circuit: generator_result.QuantumProgram,
|
128
|
+
http_client: Optional[httpx.AsyncClient] = None,
|
129
|
+
) -> str:
|
130
|
+
raw_result = await cls._call_task_pydantic(
|
131
|
+
http_method=HTTPMethod.POST,
|
132
|
+
url=routes.EXECUTION_SESSIONS_PREFIX,
|
133
|
+
model=circuit,
|
134
|
+
http_client=http_client,
|
135
|
+
)
|
136
|
+
return raw_result["id"]
|
137
|
+
|
138
|
+
@classmethod
|
139
|
+
async def call_create_session_job(
|
140
|
+
cls,
|
141
|
+
session_id: str,
|
142
|
+
primitives_input: PrimitivesInput,
|
143
|
+
http_client: Optional[httpx.AsyncClient] = None,
|
112
144
|
) -> execution_request.ExecutionJobDetails:
|
113
|
-
|
145
|
+
data = await cls._call_task_pydantic(
|
146
|
+
http_method=HTTPMethod.POST,
|
147
|
+
url=routes.EXECUTION_SESSIONS_PREFIX + f"/{session_id}",
|
148
|
+
model=primitives_input,
|
149
|
+
http_client=http_client,
|
150
|
+
)
|
151
|
+
return execution_request.ExecutionJobDetails.model_validate(data)
|
152
|
+
|
153
|
+
@classmethod
|
154
|
+
async def call_convert_quantum_program(
|
155
|
+
cls,
|
156
|
+
circuit: generator_result.QuantumProgram,
|
157
|
+
http_client: Optional[httpx.AsyncClient] = None,
|
158
|
+
) -> dict:
|
159
|
+
return await cls._call_task_pydantic(
|
114
160
|
http_method=HTTPMethod.POST,
|
115
161
|
url=routes.CONVERSION_GENERATED_CIRCUIT_TO_EXECUTION_INPUT_FULL,
|
116
162
|
model=circuit,
|
163
|
+
http_client=http_client,
|
117
164
|
)
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
165
|
+
|
166
|
+
@classmethod
|
167
|
+
async def call_execute_execution_input(
|
168
|
+
cls,
|
169
|
+
execution_input: dict,
|
170
|
+
http_client: Optional[httpx.AsyncClient] = None,
|
171
|
+
) -> execution_request.ExecutionJobDetails:
|
122
172
|
data = await cls._call_task(
|
123
173
|
http_method=HTTPMethod.POST,
|
124
|
-
|
125
|
-
url=routes.EXECUTION_JOBS_NON_VERSIONED_FULL_PATH,
|
174
|
+
url=routes.EXECUTION_JOBS_FULL_PATH,
|
126
175
|
body=execution_input,
|
127
|
-
|
176
|
+
http_client=http_client,
|
128
177
|
)
|
129
|
-
return execution_request.ExecutionJobDetails.
|
178
|
+
return execution_request.ExecutionJobDetails.model_validate(data)
|
130
179
|
|
131
180
|
@classmethod
|
132
181
|
async def call_get_execution_job_details(
|
133
182
|
cls,
|
134
183
|
job_id: JobID,
|
184
|
+
http_client: Optional[httpx.AsyncClient] = None,
|
135
185
|
) -> execution_request.ExecutionJobDetails:
|
136
|
-
headers = {_ACCEPT_HEADER: "v1"}
|
137
186
|
data = await cls._call_task(
|
138
187
|
http_method=HTTPMethod.GET,
|
139
|
-
|
140
|
-
|
141
|
-
use_versioned_url=False,
|
188
|
+
url=f"{routes.EXECUTION_JOBS_FULL_PATH}/{job_id.job_id}",
|
189
|
+
http_client=http_client,
|
142
190
|
)
|
143
|
-
return execution_request.ExecutionJobDetails.
|
191
|
+
return execution_request.ExecutionJobDetails.model_validate(data)
|
144
192
|
|
145
193
|
@classmethod
|
146
194
|
async def call_get_execution_job_result(
|
147
195
|
cls,
|
148
196
|
job_id: JobID,
|
149
|
-
|
197
|
+
http_client: Optional[httpx.AsyncClient] = None,
|
150
198
|
) -> classiq.interface.executor.execution_result.ExecuteGeneratedCircuitResults:
|
151
199
|
data = await cls._call_task(
|
152
200
|
http_method=HTTPMethod.GET,
|
153
|
-
url=f"{routes.
|
154
|
-
|
155
|
-
headers={CLASSIQ_ACCEPT_HEADER: version},
|
201
|
+
url=f"{routes.EXECUTION_JOBS_FULL_PATH}/{job_id.job_id}/result",
|
202
|
+
http_client=http_client,
|
156
203
|
)
|
157
|
-
return classiq.interface.executor.execution_result.ExecuteGeneratedCircuitResults.
|
204
|
+
return classiq.interface.executor.execution_result.ExecuteGeneratedCircuitResults.model_validate(
|
158
205
|
data
|
159
206
|
)
|
160
207
|
|
@@ -163,147 +210,238 @@ class ApiWrapper:
|
|
163
210
|
cls,
|
164
211
|
job_id: JobID,
|
165
212
|
name: str,
|
213
|
+
http_client: Optional[httpx.AsyncClient] = None,
|
166
214
|
) -> ExecutionJobDetailsV1:
|
167
215
|
data = await cls._call_task(
|
168
216
|
http_method=HTTPMethod.PATCH,
|
169
|
-
url=f"{routes.
|
217
|
+
url=f"{routes.EXECUTION_JOBS_FULL_PATH}/{job_id.job_id}",
|
170
218
|
params={
|
171
219
|
"name": name,
|
172
220
|
},
|
173
|
-
|
221
|
+
http_client=http_client,
|
222
|
+
)
|
223
|
+
return ExecutionJobDetailsV1.model_validate(data)
|
224
|
+
|
225
|
+
@classmethod
|
226
|
+
async def call_cancel_execution_job(
|
227
|
+
cls,
|
228
|
+
job_id: JobID,
|
229
|
+
http_client: Optional[httpx.AsyncClient] = None,
|
230
|
+
) -> None:
|
231
|
+
await cls._call_task(
|
232
|
+
http_method=HTTPMethod.PUT,
|
233
|
+
url=f"{routes.EXECUTION_JOBS_FULL_PATH}/{job_id.job_id}/cancel",
|
234
|
+
allow_none=True,
|
235
|
+
http_client=http_client,
|
174
236
|
)
|
175
|
-
return ExecutionJobDetailsV1.parse_obj(data)
|
176
237
|
|
177
238
|
@classmethod
|
178
239
|
async def call_query_execution_jobs(
|
179
240
|
cls,
|
180
241
|
offset: int,
|
181
242
|
limit: int,
|
243
|
+
http_client: Optional[httpx.AsyncClient] = None,
|
182
244
|
) -> ExecutionJobsQueryResultsV1:
|
183
245
|
data = await cls._call_task(
|
184
246
|
http_method=HTTPMethod.GET,
|
185
|
-
url=f"{routes.
|
247
|
+
url=f"{routes.EXECUTION_JOBS_FULL_PATH}",
|
186
248
|
params={
|
187
249
|
"offset": offset,
|
188
250
|
"limit": limit,
|
189
251
|
},
|
190
|
-
|
252
|
+
http_client=http_client,
|
191
253
|
)
|
192
|
-
return ExecutionJobsQueryResultsV1.
|
193
|
-
|
194
|
-
@classmethod
|
195
|
-
async def call_execute_estimate(
|
196
|
-
cls, request: execution_request.ExecutionRequest
|
197
|
-
) -> execute_result.EstimationResults:
|
198
|
-
poller = JobPoller(base_url=routes.EXECUTE_ESTIMATE_FULL_PATH)
|
199
|
-
result = await poller.run_pydantic(request, timeout_sec=None)
|
200
|
-
return _parse_job_response(result, execute_result.EstimationResults)
|
201
|
-
|
202
|
-
@classmethod
|
203
|
-
async def call_execute_quantum_program(
|
204
|
-
cls, request: execution_request.ExecutionRequest
|
205
|
-
) -> execute_result.MultipleExecutionDetails:
|
206
|
-
poller = JobPoller(
|
207
|
-
base_url=routes.EXECUTE_QUANTUM_PROGRAM_FULL_PATH,
|
208
|
-
)
|
209
|
-
result = await poller.run_pydantic(request, timeout_sec=None)
|
210
|
-
return _parse_job_response(result, execute_result.MultipleExecutionDetails)
|
254
|
+
return ExecutionJobsQueryResultsV1.model_validate(data)
|
211
255
|
|
212
256
|
@classmethod
|
213
257
|
async def call_analysis_task(
|
214
|
-
cls,
|
258
|
+
cls,
|
259
|
+
params: analysis_params.AnalysisParams,
|
260
|
+
http_client: Optional[httpx.AsyncClient] = None,
|
215
261
|
) -> analysis_result.Analysis:
|
216
262
|
data = await cls._call_task_pydantic(
|
217
263
|
http_method=HTTPMethod.POST,
|
218
264
|
url=routes.ANALYZER_FULL_PATH,
|
219
265
|
model=params,
|
266
|
+
http_client=http_client,
|
220
267
|
)
|
221
268
|
|
222
|
-
return analysis_result.Analysis.
|
269
|
+
return analysis_result.Analysis.model_validate(data)
|
223
270
|
|
224
271
|
@classmethod
|
225
272
|
async def call_analyzer_app(
|
226
|
-
cls,
|
273
|
+
cls,
|
274
|
+
params: generator_result.QuantumProgram,
|
275
|
+
http_client: Optional[httpx.AsyncClient] = None,
|
227
276
|
) -> analysis_result.DataID:
|
228
277
|
data = await cls._call_task_pydantic(
|
229
278
|
http_method=HTTPMethod.POST,
|
230
279
|
url=routes.ANALYZER_DATA_FULL_PATH,
|
231
280
|
model=params,
|
281
|
+
http_client=http_client,
|
232
282
|
)
|
233
|
-
return analysis_result.DataID.
|
283
|
+
return analysis_result.DataID.model_validate(data)
|
234
284
|
|
235
285
|
@classmethod
|
236
286
|
async def get_generated_circuit_from_qasm(
|
237
|
-
cls,
|
287
|
+
cls,
|
288
|
+
params: analysis_result.QasmCode,
|
289
|
+
http_client: Optional[httpx.AsyncClient] = None,
|
238
290
|
) -> generator_result.QuantumProgram:
|
239
291
|
data = await cls._call_task_pydantic(
|
240
292
|
http_method=HTTPMethod.POST,
|
241
293
|
url=routes.IDE_QASM_FULL_PATH,
|
242
294
|
model=params,
|
295
|
+
http_client=http_client,
|
243
296
|
)
|
244
|
-
return generator_result.QuantumProgram.
|
297
|
+
return generator_result.QuantumProgram.model_validate(data)
|
245
298
|
|
246
299
|
@classmethod
|
247
300
|
async def get_analyzer_app_data(
|
248
|
-
cls,
|
301
|
+
cls,
|
302
|
+
params: analysis_result.DataID,
|
303
|
+
http_client: Optional[httpx.AsyncClient] = None,
|
249
304
|
) -> generator_result.QuantumProgram:
|
250
305
|
data = await cls._call_task(
|
251
306
|
http_method=HTTPMethod.GET,
|
252
307
|
url=f"{routes.ANALYZER_DATA_FULL_PATH}/{params.id}",
|
308
|
+
http_client=http_client,
|
253
309
|
)
|
254
|
-
return generator_result.QuantumProgram.
|
310
|
+
return generator_result.QuantumProgram.model_validate(data)
|
255
311
|
|
256
312
|
@classmethod
|
257
313
|
async def call_rb_analysis_task(
|
258
|
-
cls,
|
314
|
+
cls,
|
315
|
+
params: AnalysisRBParams,
|
316
|
+
http_client: Optional[httpx.AsyncClient] = None,
|
259
317
|
) -> analysis_result.RbResults:
|
260
318
|
data = await cls._call_task(
|
261
319
|
http_method=HTTPMethod.POST,
|
262
320
|
url=routes.ANALYZER_RB_FULL_PATH,
|
263
|
-
body=params.
|
321
|
+
body=params.model_dump(),
|
322
|
+
http_client=http_client,
|
264
323
|
)
|
265
324
|
|
266
|
-
return analysis_result.RbResults.
|
325
|
+
return analysis_result.RbResults.model_validate(data)
|
267
326
|
|
268
327
|
@classmethod
|
269
328
|
async def call_hardware_connectivity_task(
|
270
|
-
cls,
|
329
|
+
cls,
|
330
|
+
params: analysis_params.AnalysisHardwareParams,
|
331
|
+
http_client: Optional[httpx.AsyncClient] = None,
|
271
332
|
) -> analysis_result.GraphResult:
|
272
333
|
data = await cls._call_task_pydantic(
|
273
334
|
http_method=HTTPMethod.POST,
|
274
335
|
url=routes.ANALYZER_HC_GRAPH_FULL_PATH,
|
275
336
|
model=params,
|
337
|
+
http_client=http_client,
|
276
338
|
)
|
277
|
-
return analysis_result.GraphResult.
|
339
|
+
return analysis_result.GraphResult.model_validate(data)
|
278
340
|
|
279
341
|
@classmethod
|
280
342
|
async def call_table_graphs_task(
|
281
343
|
cls,
|
282
344
|
params: analysis_params.AnalysisHardwareListParams,
|
345
|
+
http_client: Optional[httpx.AsyncClient] = None,
|
283
346
|
) -> analysis_result.GraphResult:
|
284
347
|
poller = JobPoller(base_url=routes.ANALYZER_HC_TABLE_GRAPH_FULL_PATH)
|
285
|
-
result = await poller.run_pydantic(
|
348
|
+
result = await poller.run_pydantic(
|
349
|
+
params, timeout_sec=None, http_client=http_client
|
350
|
+
)
|
286
351
|
return _parse_job_response(result, analysis_result.GraphResult)
|
287
352
|
|
288
353
|
@classmethod
|
289
354
|
async def call_available_devices_task(
|
290
355
|
cls,
|
291
356
|
params: analysis_params.AnalysisOptionalDevicesParams,
|
357
|
+
http_client: Optional[httpx.AsyncClient] = None,
|
292
358
|
) -> analysis_result.DevicesResult:
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
|
359
|
+
hardware_info = await cls.call_get_all_hardware_devices(http_client=http_client)
|
360
|
+
return cls._get_devices_from_hardware_info(hardware_info, params)
|
361
|
+
|
362
|
+
@staticmethod
|
363
|
+
def _get_devices_from_hardware_info(
|
364
|
+
hardware_info: list[HardwareInformation],
|
365
|
+
params: analysis_params.AnalysisOptionalDevicesParams,
|
366
|
+
) -> analysis_result.DevicesResult:
|
367
|
+
available_hardware: dict[Provider, dict[str, bool]] = {
|
368
|
+
Provider.IBM_QUANTUM: {},
|
369
|
+
Provider.AMAZON_BRAKET: {},
|
370
|
+
Provider.AZURE_QUANTUM: {},
|
371
|
+
}
|
372
|
+
for info in hardware_info:
|
373
|
+
if info.provider not in available_hardware:
|
374
|
+
continue
|
375
|
+
is_available = info.number_of_qubits >= params.qubit_count
|
376
|
+
available_hardware[info.provider][info.display_name] = is_available
|
377
|
+
return analysis_result.DevicesResult(
|
378
|
+
devices=analysis_result.AvailableHardware(
|
379
|
+
ibm_quantum=available_hardware[Provider.IBM_QUANTUM],
|
380
|
+
azure_quantum=available_hardware[Provider.AZURE_QUANTUM],
|
381
|
+
amazon_braket=available_hardware[Provider.AMAZON_BRAKET],
|
382
|
+
),
|
383
|
+
status=GraphStatus.SUCCESS,
|
297
384
|
)
|
298
|
-
|
385
|
+
|
386
|
+
@classmethod
|
387
|
+
async def call_get_all_hardware_devices(
|
388
|
+
cls,
|
389
|
+
http_client: Optional[httpx.AsyncClient] = None,
|
390
|
+
) -> list[HardwareInformation]:
|
391
|
+
data = await client().call_api(
|
392
|
+
http_method=HTTPMethod.GET,
|
393
|
+
url="/hardware-catalog/v1/hardwares",
|
394
|
+
use_versioned_url=False,
|
395
|
+
http_client=http_client,
|
396
|
+
)
|
397
|
+
if not isinstance(data, list):
|
398
|
+
raise ClassiqAPIError(f"Unexpected value: {data}")
|
399
|
+
return [HardwareInformation.model_validate(info) for info in data]
|
299
400
|
|
300
401
|
@classmethod
|
301
402
|
async def call_generate_hamiltonian_task(
|
302
|
-
cls,
|
403
|
+
cls,
|
404
|
+
problem: ground_state_problem.CHEMISTRY_PROBLEMS_TYPE,
|
405
|
+
http_client: Optional[httpx.AsyncClient] = None,
|
303
406
|
) -> operator.PauliOperator:
|
304
407
|
poller = JobPoller(
|
305
408
|
base_url=routes.GENERATE_HAMILTONIAN_FULL_PATH,
|
306
|
-
use_versioned_url=False,
|
307
409
|
)
|
308
|
-
result = await poller.run_pydantic(
|
410
|
+
result = await poller.run_pydantic(
|
411
|
+
problem, timeout_sec=None, http_client=http_client
|
412
|
+
)
|
309
413
|
return _parse_job_response(result, operator.PauliOperator)
|
414
|
+
|
415
|
+
@classmethod
|
416
|
+
async def call_iqcc_init_auth(
|
417
|
+
cls,
|
418
|
+
data: IQCCInitAuthData,
|
419
|
+
http_client: Optional[httpx.AsyncClient] = None,
|
420
|
+
) -> IQCCInitAuthResponse:
|
421
|
+
response = await cls._call_task_pydantic(
|
422
|
+
http_method=HTTPMethod.PUT,
|
423
|
+
url=f"{routes.IQCC_INIT_AUTH_FULL_PATH}",
|
424
|
+
model=data,
|
425
|
+
http_client=http_client,
|
426
|
+
)
|
427
|
+
return IQCCInitAuthResponse.model_validate(response)
|
428
|
+
|
429
|
+
@classmethod
|
430
|
+
async def call_iqcc_probe_auth(
|
431
|
+
cls,
|
432
|
+
data: IQCCProbeAuthData,
|
433
|
+
http_client: Optional[httpx.AsyncClient] = None,
|
434
|
+
) -> Optional[IQCCProbeAuthResponse]:
|
435
|
+
try:
|
436
|
+
response = await cls._call_task_pydantic(
|
437
|
+
http_method=HTTPMethod.PUT,
|
438
|
+
url=f"{routes.IQCC_PROBE_AUTH_FULL_PATH}",
|
439
|
+
model=data,
|
440
|
+
http_client=http_client,
|
441
|
+
)
|
442
|
+
except ClassiqAPIError as ex:
|
443
|
+
if ex.status_code == 418:
|
444
|
+
return None
|
445
|
+
raise
|
446
|
+
|
447
|
+
return IQCCProbeAuthResponse.model_validate(response)
|