classiq 0.37.1__py3-none-any.whl → 0.65.3__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 +49 -34
- classiq/_analyzer_extras/_ipywidgets_async_extension.py +3 -2
- classiq/_analyzer_extras/interactive_hardware.py +3 -3
- classiq/_internals/api_wrapper.py +241 -95
- classiq/_internals/async_utils.py +2 -77
- classiq/_internals/authentication/auth0.py +26 -10
- classiq/_internals/authentication/authentication.py +11 -0
- classiq/_internals/authentication/device.py +18 -8
- classiq/_internals/authentication/password_manager.py +40 -13
- classiq/_internals/authentication/token_manager.py +11 -6
- classiq/_internals/client.py +106 -37
- classiq/_internals/config.py +3 -4
- classiq/_internals/host_checker.py +38 -15
- classiq/_internals/jobs.py +56 -50
- classiq/_internals/type_validation.py +9 -9
- classiq/analyzer/__init__.py +1 -3
- classiq/analyzer/analyzer.py +50 -47
- classiq/analyzer/analyzer_utilities.py +15 -15
- classiq/analyzer/rb.py +19 -20
- classiq/analyzer/show_interactive_hack.py +30 -7
- 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 +170 -170
- classiq/applications/chemistry/ground_state_problem.py +1 -1
- classiq/applications/combinatorial_helpers/allowed_constraints.py +23 -0
- classiq/applications/combinatorial_helpers/arithmetic/arithmetic_expression.py +35 -0
- classiq/applications/combinatorial_helpers/arithmetic/isolation.py +42 -0
- classiq/applications/combinatorial_helpers/combinatorial_problem_utils.py +166 -0
- classiq/applications/combinatorial_helpers/encoding_mapping.py +107 -0
- classiq/applications/combinatorial_helpers/encoding_utils.py +124 -0
- classiq/applications/combinatorial_helpers/memory.py +75 -0
- classiq/applications/combinatorial_helpers/optimization_model.py +193 -0
- classiq/applications/combinatorial_helpers/pauli_helpers/pauli_sparsing.py +31 -0
- classiq/applications/combinatorial_helpers/pauli_helpers/pauli_utils.py +46 -0
- classiq/applications/combinatorial_helpers/pyomo_utils.py +447 -0
- classiq/applications/combinatorial_helpers/sympy_utils.py +22 -0
- classiq/applications/combinatorial_helpers/transformations/encoding.py +189 -0
- classiq/applications/combinatorial_helpers/transformations/fixed_variables.py +143 -0
- classiq/applications/combinatorial_helpers/transformations/ising_converter.py +120 -0
- classiq/applications/combinatorial_helpers/transformations/penalty.py +31 -0
- classiq/applications/combinatorial_helpers/transformations/penalty_support.py +37 -0
- classiq/applications/combinatorial_helpers/transformations/sign_seperation.py +74 -0
- classiq/applications/combinatorial_helpers/transformations/slack_variables.py +87 -0
- classiq/applications/combinatorial_optimization/__init__.py +24 -5
- classiq/applications/combinatorial_optimization/combinatorial_optimization_config.py +2 -2
- classiq/applications/combinatorial_optimization/combinatorial_optimization_model_constructor.py +137 -0
- 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 +50 -57
- classiq/applications/grover/__init__.py +9 -0
- classiq/applications/grover/grover_model_constructor.py +157 -0
- classiq/applications/hamiltonian/__init__.py +0 -0
- classiq/applications/hamiltonian/pauli_decomposition.py +113 -0
- classiq/applications/libraries/__init__.py +0 -0
- classiq/applications/libraries/qmci_library.py +22 -0
- classiq/applications/qnn/__init__.py +2 -4
- classiq/applications/qnn/circuit_utils.py +8 -8
- 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 +2 -2
- 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 +7 -7
- classiq/applications/qsvm/__init__.py +6 -4
- classiq/applications/qsvm/qsvm.py +4 -10
- classiq/applications/qsvm/qsvm_data_generation.py +5 -8
- 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 +23 -117
- classiq/interface/_version.py +1 -1
- classiq/interface/analyzer/analysis_params.py +49 -16
- classiq/interface/analyzer/cytoscape_graph.py +15 -9
- classiq/interface/analyzer/result.py +36 -32
- classiq/interface/applications/qsvm.py +28 -25
- classiq/interface/ast_node.py +16 -0
- classiq/interface/backend/backend_preferences.py +390 -119
- classiq/interface/backend/ionq/ionq_quantum_program.py +15 -23
- classiq/interface/backend/pydantic_backend.py +27 -22
- classiq/interface/backend/quantum_backend_providers.py +70 -16
- classiq/interface/chemistry/fermionic_operator.py +43 -32
- classiq/interface/chemistry/ground_state_problem.py +42 -24
- classiq/interface/chemistry/molecule.py +20 -14
- classiq/interface/chemistry/operator.py +75 -236
- classiq/interface/combinatorial_optimization/encoding_types.py +1 -1
- classiq/interface/combinatorial_optimization/examples/ascending_sequence.py +2 -4
- classiq/interface/combinatorial_optimization/examples/greater_than_ilp.py +1 -1
- classiq/interface/combinatorial_optimization/examples/ilp.py +2 -1
- 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/mds.py +2 -1
- classiq/interface/combinatorial_optimization/examples/mht.py +10 -6
- classiq/interface/combinatorial_optimization/examples/mis.py +4 -1
- classiq/interface/combinatorial_optimization/examples/mvc.py +2 -1
- classiq/interface/combinatorial_optimization/examples/portfolio_variations.py +2 -2
- classiq/interface/combinatorial_optimization/examples/set_cover.py +3 -3
- classiq/interface/combinatorial_optimization/examples/tsp.py +4 -3
- classiq/interface/combinatorial_optimization/examples/tsp_digraph.py +6 -2
- classiq/interface/combinatorial_optimization/mht_qaoa_input.py +14 -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/__init__.py +0 -0
- classiq/interface/debug_info/debug_info.py +86 -0
- classiq/interface/exceptions.py +201 -0
- 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/estimation.py +2 -2
- classiq/interface/executor/execution_preferences.py +26 -143
- classiq/interface/executor/execution_request.py +36 -56
- classiq/interface/executor/execution_result.py +30 -8
- classiq/interface/executor/iqae_result.py +4 -6
- classiq/interface/executor/optimizer_preferences.py +34 -22
- classiq/interface/executor/{quantum_program.py → quantum_code.py} +44 -34
- classiq/interface/executor/quantum_instruction_set.py +3 -2
- classiq/interface/executor/register_initialization.py +12 -17
- classiq/interface/executor/result.py +122 -64
- classiq/interface/executor/vqe_result.py +11 -11
- classiq/interface/finance/function_input.py +42 -19
- classiq/interface/finance/gaussian_model_input.py +7 -5
- classiq/interface/finance/log_normal_model_input.py +6 -4
- classiq/interface/finance/model_input.py +6 -4
- classiq/interface/generator/adjacency.py +1 -3
- classiq/interface/generator/amplitude_loading.py +27 -14
- classiq/interface/generator/ansatz_library.py +5 -5
- classiq/interface/generator/application_apis/__init__.py +1 -0
- classiq/interface/generator/application_apis/arithmetic_declarations.py +17 -0
- 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 +57 -6
- classiq/interface/generator/arith/arithmetic.py +37 -16
- classiq/interface/generator/arith/arithmetic_arg_type_validator.py +15 -17
- classiq/interface/generator/arith/arithmetic_expression_abc.py +70 -26
- classiq/interface/generator/arith/arithmetic_expression_parser.py +18 -12
- classiq/interface/generator/arith/arithmetic_expression_validator.py +61 -43
- classiq/interface/generator/arith/arithmetic_operations.py +19 -16
- 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 +4 -3
- classiq/interface/generator/arith/binary_ops.py +375 -139
- classiq/interface/generator/arith/endianness.py +1 -1
- classiq/interface/generator/arith/extremum_operations.py +96 -23
- classiq/interface/generator/arith/logical_ops.py +16 -12
- classiq/interface/generator/arith/machine_precision.py +3 -0
- classiq/interface/generator/arith/number_utils.py +44 -48
- classiq/interface/generator/arith/register_user_input.py +70 -27
- classiq/interface/generator/arith/unary_ops.py +57 -46
- 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 +5 -5
- 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 +8 -6
- classiq/interface/generator/compiler_keywords.py +8 -0
- classiq/interface/generator/complex_type.py +13 -25
- classiq/interface/generator/constant.py +3 -4
- classiq/interface/generator/control_state.py +35 -28
- 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 +26 -8
- 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 +21 -7
- classiq/interface/generator/expressions/expression.py +27 -15
- 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 +59 -0
- 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 +20 -11
- classiq/interface/generator/finance.py +3 -3
- 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 +42 -69
- classiq/interface/generator/functions/__init__.py +0 -22
- classiq/interface/generator/functions/builtins/__init__.py +0 -0
- 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 +155 -22
- classiq/interface/generator/grover_diffuser.py +32 -25
- classiq/interface/generator/grover_operator.py +34 -23
- 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 +12 -8
- classiq/interface/generator/hardware/hardware_data.py +76 -36
- classiq/interface/generator/hardware_efficient_ansatz.py +38 -17
- classiq/interface/generator/hartree_fock.py +14 -4
- classiq/interface/generator/identity.py +10 -6
- classiq/interface/generator/linear_pauli_rotations.py +33 -19
- classiq/interface/generator/mcmt_method.py +1 -1
- classiq/interface/generator/mcu.py +20 -16
- classiq/interface/generator/mcx.py +29 -20
- classiq/interface/generator/model/__init__.py +2 -5
- classiq/interface/generator/model/constraints.py +27 -8
- classiq/interface/generator/model/model.py +32 -203
- classiq/interface/generator/model/preferences/preferences.py +118 -43
- classiq/{quantum_register.py → interface/generator/model/quantum_register.py} +27 -22
- classiq/interface/generator/oracles/arithmetic_oracle.py +2 -4
- classiq/interface/generator/oracles/custom_oracle.py +17 -13
- classiq/interface/generator/oracles/oracle_abc.py +9 -9
- 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 +47 -34
- classiq/interface/generator/qsvm.py +13 -17
- classiq/interface/generator/quantum_function_call.py +107 -87
- classiq/interface/generator/{generated_circuit.py → quantum_program.py} +50 -37
- classiq/interface/generator/range_types.py +13 -12
- classiq/interface/generator/register_role.py +18 -6
- classiq/interface/generator/slice_parsing_utils.py +11 -6
- classiq/interface/generator/standard_gates/controlled_standard_gates.py +32 -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 +5 -7
- classiq/interface/generator/state_preparation/state_preparation.py +30 -23
- 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 +15 -14
- classiq/interface/generator/ucc.py +9 -6
- classiq/interface/generator/unitary_gate.py +10 -6
- classiq/interface/generator/user_defined_function_params.py +4 -1
- classiq/interface/generator/validations/flow_graph.py +11 -9
- classiq/interface/generator/validations/validator_functions.py +8 -6
- classiq/interface/generator/visitor.py +23 -16
- classiq/interface/hardware.py +31 -10
- classiq/interface/helpers/classproperty.py +8 -0
- classiq/interface/helpers/custom_encoders.py +3 -0
- 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 -11
- classiq/interface/helpers/validation_helpers.py +4 -21
- classiq/interface/helpers/versioned_model.py +1 -1
- 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 +35 -6
- classiq/interface/model/allocate.py +16 -0
- classiq/interface/model/bind_operation.py +44 -14
- 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 +31 -26
- classiq/interface/model/invert.py +12 -0
- classiq/interface/model/model.py +87 -73
- classiq/interface/model/native_function_definition.py +16 -21
- 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 +38 -21
- 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 +146 -462
- classiq/interface/model/quantum_function_declaration.py +193 -152
- classiq/interface/model/quantum_lambda_function.py +65 -0
- classiq/interface/model/quantum_statement.py +71 -12
- classiq/interface/model/quantum_type.py +205 -67
- classiq/interface/model/quantum_variable_declaration.py +4 -26
- classiq/interface/model/repeat.py +15 -0
- classiq/interface/model/statement_block.py +58 -0
- classiq/interface/model/validation_handle.py +13 -6
- classiq/interface/model/variable_declaration_statement.py +3 -1
- classiq/interface/model/within_apply_operation.py +13 -0
- classiq/interface/pyomo_extension/pyomo_sympy_bimap.py +4 -1
- classiq/interface/server/global_versions.py +6 -7
- classiq/interface/server/routes.py +22 -21
- classiq/interface/source_reference.py +59 -0
- classiq/model_expansions/__init__.py +0 -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 +17 -10
- classiq/qmod/builtins/__init__.py +19 -2
- classiq/qmod/builtins/classical_execution_primitives.py +60 -47
- classiq/qmod/builtins/classical_functions.py +44 -38
- 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 +379 -57
- classiq/qmod/builtins/structs.py +103 -80
- classiq/qmod/cfunc.py +42 -0
- classiq/qmod/classical_function.py +8 -20
- classiq/qmod/cparam.py +64 -0
- classiq/qmod/create_model_function.py +56 -0
- classiq/qmod/declaration_inferrer.py +145 -112
- classiq/qmod/expression_query.py +39 -0
- classiq/qmod/generative.py +42 -0
- classiq/qmod/model_state_container.py +19 -5
- classiq/qmod/native/__init__.py +7 -0
- classiq/qmod/native/expression_to_qmod.py +194 -0
- classiq/qmod/native/pretty_printer.py +401 -0
- 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 +79 -0
- classiq/qmod/qmod_constant.py +143 -0
- classiq/qmod/qmod_parameter.py +84 -53
- classiq/qmod/qmod_variable.py +497 -100
- classiq/qmod/quantum_callable.py +17 -7
- classiq/qmod/quantum_expandable.py +278 -105
- classiq/qmod/quantum_function.py +232 -48
- 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 +178 -111
- classiq/qmod/symbolic_expr.py +36 -12
- classiq/qmod/symbolic_type.py +2 -5
- classiq/qmod/type_attribute_remover.py +32 -0
- classiq/qmod/utilities.py +108 -1
- classiq/qmod/write_qmod.py +53 -0
- classiq/synthesis.py +210 -22
- {classiq-0.37.1.dist-info → classiq-0.65.3.dist-info}/METADATA +16 -8
- classiq-0.65.3.dist-info/RECORD +521 -0
- {classiq-0.37.1.dist-info → classiq-0.65.3.dist-info}/WHEEL +1 -1
- classiq/_internals/_qfunc_ext.py +0 -6
- classiq/applications/benchmarking/__init__.py +0 -9
- classiq/applications/benchmarking/mirror_benchmarking.py +0 -67
- classiq/applications/numpy_utils.py +0 -37
- classiq/applications_model_constructors/__init__.py +0 -17
- classiq/applications_model_constructors/combinatorial_optimization_model_constructor.py +0 -178
- classiq/applications_model_constructors/grover_model_constructor.py +0 -227
- classiq/applications_model_constructors/libraries/ampltitude_estimation_library.py +0 -11
- classiq/applications_model_constructors/libraries/qmci_library.py +0 -109
- 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/exceptions.py +0 -131
- classiq/interface/executor/aws_execution_cost.py +0 -72
- classiq/interface/executor/error_mitigation.py +0 -6
- classiq/interface/generator/credit_risk_example/linear_gci.py +0 -115
- classiq/interface/generator/credit_risk_example/weighted_adder.py +0 -59
- 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/expressions/qmod_qnum_proxy.py +0 -22
- 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 -862
- classiq/interface/generator/functions/core_lib_declarations/quantum_operators.py +0 -169
- classiq/interface/generator/functions/foreign_function_definition.py +0 -106
- classiq/interface/generator/functions/function_implementation.py +0 -103
- classiq/interface/generator/functions/native_function_definition.py +0 -153
- classiq/interface/generator/functions/quantum_function_declaration.py +0 -69
- classiq/interface/generator/functions/register.py +0 -42
- classiq/interface/generator/functions/register_mapping_data.py +0 -102
- 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 -63
- classiq/interface/generator/types/builtin_struct_declarations/__init__.py +0 -2
- classiq/interface/generator/types/builtin_struct_declarations/pauli_struct_declarations.py +0 -22
- classiq/interface/generator/types/builtin_struct_declarations/qaoa_declarations.py +0 -23
- classiq/interface/generator/types/combinatorial_problem.py +0 -26
- classiq/interface/ide/show.py +0 -34
- classiq/interface/model/common_model_types.py +0 -23
- classiq/interface/model/numeric_reinterpretation.py +0 -25
- classiq/interface/model/operator_synthesis_data.py +0 -48
- classiq/interface/model/quantum_expressions/control_state.py +0 -38
- classiq/interface/model/quantum_if_operation.py +0 -95
- 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 -154
- 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 -466
- classiq/model/function_handler.pyi +0 -152
- classiq/model/logic_flow.py +0 -149
- classiq/model/logic_flow_change_handler.py +0 -71
- classiq/model/model.py +0 -246
- classiq/qmod/builtins/functions.py +0 -896
- classiq/qmod/qmod_struct.py +0 -37
- classiq/quantum_functions/__init__.py +0 -17
- classiq/quantum_functions/annotation_parser.py +0 -207
- 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.37.1.dist-info/RECORD +0 -418
- /classiq/{applications_model_constructors/libraries → applications/combinatorial_helpers}/__init__.py +0 -0
- /classiq/{interface/generator/credit_risk_example → applications/combinatorial_helpers/arithmetic}/__init__.py +0 -0
- /classiq/{interface/generator/functions/core_lib_declarations → applications/combinatorial_helpers/pauli_helpers}/__init__.py +0 -0
- /classiq/{interface/generator/functions/core_lib_declarations/quantum_functions/chemistry_functions.py → applications/combinatorial_helpers/py.typed} +0 -0
- /classiq/{interface/model/resolvers → applications/combinatorial_helpers/solvers}/__init__.py +0 -0
- /classiq/{interface/model/validations → applications/combinatorial_helpers/transformations}/__init__.py +0 -0
- /classiq/{_internals → interface}/enum_utils.py +0 -0
@@ -1,5 +1,6 @@
|
|
1
1
|
import networkx as nx
|
2
2
|
import pyomo.core as pyo
|
3
|
+
import pyomo.core.expr.numeric_expr as pyo_expr
|
3
4
|
|
4
5
|
|
5
6
|
def mis(graph: nx.Graph) -> pyo.ConcreteModel:
|
@@ -7,7 +8,9 @@ def mis(graph: nx.Graph) -> pyo.ConcreteModel:
|
|
7
8
|
model.x = pyo.Var(graph.nodes, domain=pyo.Binary)
|
8
9
|
|
9
10
|
@model.Constraint(graph.edges)
|
10
|
-
def independent_rule(
|
11
|
+
def independent_rule(
|
12
|
+
model: pyo.ConcreteModel, node1: int, node2: int
|
13
|
+
) -> pyo_expr.ExpressionBase:
|
11
14
|
return model.x[node1] + model.x[node2] <= 1
|
12
15
|
|
13
16
|
model.cost = pyo.Objective(expr=sum(model.x.values()), sense=pyo.maximize)
|
@@ -1,5 +1,6 @@
|
|
1
1
|
import networkx as nx
|
2
2
|
import pyomo.core as pyo
|
3
|
+
import pyomo.core.expr.numeric_expr as pyo_expr
|
3
4
|
|
4
5
|
|
5
6
|
def mvc(graph: nx.Graph, k: int) -> pyo.ConcreteModel:
|
@@ -7,7 +8,7 @@ def mvc(graph: nx.Graph, k: int) -> pyo.ConcreteModel:
|
|
7
8
|
model.x = pyo.Var(graph.nodes, domain=pyo.Binary)
|
8
9
|
model.amount_constraint = pyo.Constraint(expr=sum(model.x.values()) == k)
|
9
10
|
|
10
|
-
def obj_expression(model):
|
11
|
+
def obj_expression(model: pyo.ConcreteModel) -> pyo_expr.ExpressionBase:
|
11
12
|
# number of edges not covered
|
12
13
|
return sum((1 - model.x[i]) * (1 - model.x[j]) for i, j in graph.edges)
|
13
14
|
|
@@ -1,10 +1,10 @@
|
|
1
1
|
import itertools
|
2
|
-
from typing import List
|
3
2
|
|
4
3
|
import pyomo.core as pyo
|
4
|
+
import pyomo.core.expr.numeric_expr as pyo_expr
|
5
5
|
|
6
6
|
|
7
|
-
def set_cover(sub_sets:
|
7
|
+
def set_cover(sub_sets: list[list[int]]) -> pyo.ConcreteModel:
|
8
8
|
entire_set = set(itertools.chain(*sub_sets))
|
9
9
|
n = max(entire_set)
|
10
10
|
num_sets = len(sub_sets)
|
@@ -16,7 +16,7 @@ def set_cover(sub_sets: List[List[int]]) -> pyo.ConcreteModel:
|
|
16
16
|
model.x = pyo.Var(range(num_sets), domain=pyo.Binary)
|
17
17
|
|
18
18
|
@model.Constraint(entire_set)
|
19
|
-
def independent_rule(model, num):
|
19
|
+
def independent_rule(model: pyo.ConcreteModel, num: int) -> pyo_expr.ExpressionBase:
|
20
20
|
return sum(model.x[idx] for idx in range(num_sets) if num in sub_sets[idx]) >= 1
|
21
21
|
|
22
22
|
model.cost = pyo.Objective(expr=sum(model.x.values()), sense=pyo.minimize)
|
@@ -2,6 +2,7 @@ import itertools
|
|
2
2
|
|
3
3
|
import numpy as np
|
4
4
|
import pyomo.core as pyo
|
5
|
+
import pyomo.core.expr.numeric_expr as pyo_expr
|
5
6
|
|
6
7
|
|
7
8
|
def tsp(distance_matrix: np.ndarray) -> pyo.ConcreteModel:
|
@@ -22,16 +23,16 @@ def tsp(distance_matrix: np.ndarray) -> pyo.ConcreteModel:
|
|
22
23
|
@model.Constraint(points)
|
23
24
|
def each_step_visits_one_point_rule(
|
24
25
|
model: pyo.ConcreteModel, ii: int
|
25
|
-
) ->
|
26
|
+
) -> pyo_expr.ExpressionBase:
|
26
27
|
return sum(model.x[ii, jj] for jj in range(num_points)) == 1
|
27
28
|
|
28
29
|
@model.Constraint(points)
|
29
30
|
def each_point_visited_once_rule(
|
30
31
|
model: pyo.ConcreteModel, jj: int
|
31
|
-
) ->
|
32
|
+
) -> pyo_expr.ExpressionBase:
|
32
33
|
return sum(model.x[ii, jj] for ii in range(num_points)) == 1
|
33
34
|
|
34
|
-
def is_travel_between_2_points(point1: int, point2: int) ->
|
35
|
+
def is_travel_between_2_points(point1: int, point2: int) -> pyo_expr.ExpressionBase:
|
35
36
|
return sum(model.x[point1, kk] * model.x[point2, kk + 1] for kk in points[:-1])
|
36
37
|
|
37
38
|
model.cost = pyo.Objective(
|
@@ -21,11 +21,15 @@ def tsp_digraph(
|
|
21
21
|
) # x[i, j] = 1 indicates that point i is visited at step j
|
22
22
|
|
23
23
|
@model.Constraint(points)
|
24
|
-
def each_step_visits_one_point_rule(
|
24
|
+
def each_step_visits_one_point_rule(
|
25
|
+
model: pyo.ConcreteModel, ii: int
|
26
|
+
) -> pyo.ExpressionBase:
|
25
27
|
return sum(model.x[ii, jj] for jj in steps) == 1
|
26
28
|
|
27
29
|
@model.Constraint(steps)
|
28
|
-
def each_point_visited_once_rule(
|
30
|
+
def each_point_visited_once_rule(
|
31
|
+
model: pyo.ConcreteModel, jj: int
|
32
|
+
) -> pyo.ExpressionBase:
|
29
33
|
return sum(model.x[ii, jj] for ii in points) == 1
|
30
34
|
|
31
35
|
def is_travel_between_2_points(point1: int, point2: int) -> pyo.ExpressionBase:
|
@@ -1,10 +1,10 @@
|
|
1
|
-
from typing import List
|
2
|
-
|
3
1
|
import more_itertools
|
4
2
|
import numpy as np
|
5
3
|
import pydantic
|
6
4
|
from pydantic import BaseModel
|
7
5
|
|
6
|
+
from classiq.interface.exceptions import ClassiqValueError
|
7
|
+
|
8
8
|
_TOLERANCE_DECIMALS = 6
|
9
9
|
|
10
10
|
|
@@ -22,7 +22,7 @@ class MhtQaoaInput(BaseModel):
|
|
22
22
|
reps: pydantic.PositiveInt = pydantic.Field(
|
23
23
|
default=3, description="Number of QAOA layers."
|
24
24
|
)
|
25
|
-
plot_list:
|
25
|
+
plot_list: list[PlotData] = pydantic.Field(
|
26
26
|
description="The list of (x,y,t) plots of the MHT problem."
|
27
27
|
)
|
28
28
|
misdetection_maximum_time_steps: pydantic.NonNegativeInt = pydantic.Field(
|
@@ -51,8 +51,11 @@ class MhtQaoaInput(BaseModel):
|
|
51
51
|
def is_valid_cost(self, cost: float) -> bool:
|
52
52
|
return True
|
53
53
|
|
54
|
-
@pydantic.
|
55
|
-
|
54
|
+
@pydantic.field_validator("plot_list")
|
55
|
+
@classmethod
|
56
|
+
def round_plot_list_times_and_validate(
|
57
|
+
cls, plot_list: list[PlotData]
|
58
|
+
) -> list[PlotData]:
|
56
59
|
MhtQaoaInput._check_all_ids_are_distinct(plot_list)
|
57
60
|
MhtQaoaInput._round_to_tolerance_decimals(plot_list)
|
58
61
|
|
@@ -63,16 +66,18 @@ class MhtQaoaInput(BaseModel):
|
|
63
66
|
}
|
64
67
|
|
65
68
|
if len(time_diff_set) != 1:
|
66
|
-
raise
|
69
|
+
raise ClassiqValueError(
|
70
|
+
"The time difference between each time stamp is not equal"
|
71
|
+
)
|
67
72
|
|
68
73
|
return plot_list
|
69
74
|
|
70
75
|
@staticmethod
|
71
|
-
def _round_to_tolerance_decimals(plot_list:
|
76
|
+
def _round_to_tolerance_decimals(plot_list: list[PlotData]) -> None:
|
72
77
|
for plot in plot_list:
|
73
78
|
plot.t = np.round(plot.t, decimals=_TOLERANCE_DECIMALS)
|
74
79
|
|
75
80
|
@staticmethod
|
76
|
-
def _check_all_ids_are_distinct(plot_list:
|
81
|
+
def _check_all_ids_are_distinct(plot_list: list[PlotData]) -> None:
|
77
82
|
if not more_itertools.all_unique(plot.plot_id for plot in plot_list):
|
78
|
-
raise
|
83
|
+
raise ClassiqValueError("Plot IDs should be unique.")
|
@@ -1,4 +1,4 @@
|
|
1
|
-
from typing import Any
|
1
|
+
from typing import Any
|
2
2
|
|
3
3
|
import pydantic
|
4
4
|
from pydantic import BaseModel
|
@@ -14,4 +14,4 @@ class MaxCutProblem(BaseModel):
|
|
14
14
|
default_factory=CombinatorialOptimizer,
|
15
15
|
description="preferences for the VQE execution",
|
16
16
|
)
|
17
|
-
serialized_graph:
|
17
|
+
serialized_graph: dict[str, Any]
|
File without changes
|
@@ -0,0 +1,86 @@
|
|
1
|
+
import json
|
2
|
+
from collections.abc import Mapping
|
3
|
+
from typing import Any, Optional, Union
|
4
|
+
from uuid import UUID
|
5
|
+
|
6
|
+
from pydantic import BaseModel, Field
|
7
|
+
|
8
|
+
from classiq.interface.enum_utils import StrEnum
|
9
|
+
from classiq.interface.generator.generated_circuit_data import (
|
10
|
+
FunctionDebugInfoInterface,
|
11
|
+
OperationLevel,
|
12
|
+
)
|
13
|
+
|
14
|
+
ParameterValue = Union[float, int, str, None]
|
15
|
+
|
16
|
+
|
17
|
+
class StatementType(StrEnum):
|
18
|
+
CONTROL = "control"
|
19
|
+
POWER = "power"
|
20
|
+
INVERT = "invert"
|
21
|
+
WITHIN_APPLY = "within_apply"
|
22
|
+
ASSIGNMENT = "assignment"
|
23
|
+
REPEAT = "repeat"
|
24
|
+
|
25
|
+
|
26
|
+
class FunctionDebugInfo(BaseModel):
|
27
|
+
name: str
|
28
|
+
# Parameters describe classical parameters passed to function
|
29
|
+
parameters: dict[str, str]
|
30
|
+
level: OperationLevel
|
31
|
+
statement_type: Union[StatementType, None] = None
|
32
|
+
is_allocate_or_free: bool = Field(default=False)
|
33
|
+
is_inverse: bool = Field(default=False)
|
34
|
+
port_to_passed_variable_map: dict[str, str] = Field(default_factory=dict)
|
35
|
+
|
36
|
+
@staticmethod
|
37
|
+
def param_controller(value: Any) -> str:
|
38
|
+
try:
|
39
|
+
return json.dumps(value)
|
40
|
+
except TypeError:
|
41
|
+
return repr(value)
|
42
|
+
|
43
|
+
def update_map_from_port_mapping(self, port_mapping: Mapping[str, str]) -> None:
|
44
|
+
new_port_to_passed_variable_map = self.port_to_passed_variable_map.copy()
|
45
|
+
for old_key, new_key in port_mapping.items():
|
46
|
+
if old_key in new_port_to_passed_variable_map:
|
47
|
+
new_port_to_passed_variable_map[new_key] = (
|
48
|
+
new_port_to_passed_variable_map.pop(old_key)
|
49
|
+
)
|
50
|
+
self.port_to_passed_variable_map = new_port_to_passed_variable_map
|
51
|
+
|
52
|
+
def update_map_from_inout_port_mapping(
|
53
|
+
self, port_mapping: Mapping[str, tuple[str, str]]
|
54
|
+
) -> None:
|
55
|
+
new_port_to_passed_variable_map = self.port_to_passed_variable_map.copy()
|
56
|
+
for old_key, (new_key1, new_key2) in port_mapping.items():
|
57
|
+
if old_key in new_port_to_passed_variable_map:
|
58
|
+
value = new_port_to_passed_variable_map.pop(old_key)
|
59
|
+
new_port_to_passed_variable_map[new_key1] = value
|
60
|
+
new_port_to_passed_variable_map[new_key2] = value
|
61
|
+
self.port_to_passed_variable_map = new_port_to_passed_variable_map
|
62
|
+
|
63
|
+
|
64
|
+
class DebugInfoCollection(BaseModel):
|
65
|
+
# Pydantic only started supporting UUID as keys in Pydantic V2
|
66
|
+
# See https://github.com/pydantic/pydantic/issues/2096#issuecomment-814860206
|
67
|
+
# For now, we use strings as keys in the raw data and use UUID in the wrapper logic
|
68
|
+
data: dict[str, FunctionDebugInfo] = Field(default={})
|
69
|
+
blackbox_data: dict[str, FunctionDebugInfoInterface] = Field(default={})
|
70
|
+
|
71
|
+
def __setitem__(self, key: UUID, value: FunctionDebugInfo) -> None:
|
72
|
+
self.data[str(key)] = value
|
73
|
+
|
74
|
+
def get(self, key: UUID) -> Optional[FunctionDebugInfo]:
|
75
|
+
return self.data.get(str(key))
|
76
|
+
|
77
|
+
def __getitem__(self, key: UUID) -> FunctionDebugInfo:
|
78
|
+
return self.data[str(key)]
|
79
|
+
|
80
|
+
def __contains__(self, key: UUID) -> bool:
|
81
|
+
return str(key) in self.data
|
82
|
+
|
83
|
+
def get_blackbox_data(self, key: UUID) -> Optional[FunctionDebugInfoInterface]:
|
84
|
+
if (debug_info := self.get(key)) is None:
|
85
|
+
return None
|
86
|
+
return self.blackbox_data.get(debug_info.name)
|
@@ -0,0 +1,201 @@
|
|
1
|
+
import logging
|
2
|
+
from collections.abc import Iterable
|
3
|
+
from typing import Optional
|
4
|
+
|
5
|
+
_logger = logging.getLogger(__name__)
|
6
|
+
|
7
|
+
CLASSIQ_SLACK_COMMUNITY_LINK = (
|
8
|
+
"\nIf you need further assistance, please reach out on our Community Slack channel "
|
9
|
+
"at: https://short.classiq.io/join-slack"
|
10
|
+
)
|
11
|
+
|
12
|
+
|
13
|
+
class ClassiqError(Exception):
|
14
|
+
def __init__(self, message: str) -> None:
|
15
|
+
self._raw_message = message
|
16
|
+
if CLASSIQ_SLACK_COMMUNITY_LINK not in message:
|
17
|
+
message = message + CLASSIQ_SLACK_COMMUNITY_LINK
|
18
|
+
super().__init__(message)
|
19
|
+
|
20
|
+
@property
|
21
|
+
def raw_message(self) -> str:
|
22
|
+
return self._raw_message
|
23
|
+
|
24
|
+
|
25
|
+
class ClassiqExecutionError(ClassiqError):
|
26
|
+
pass
|
27
|
+
|
28
|
+
|
29
|
+
class ClassiqMissingOutputFormatError(ClassiqError):
|
30
|
+
def __init__(self, missing_formats: list[str]) -> None:
|
31
|
+
msg = (
|
32
|
+
f"Cannot create program because output format is missing. "
|
33
|
+
f"Expected one of the following formats: {missing_formats}"
|
34
|
+
)
|
35
|
+
super().__init__(message=msg)
|
36
|
+
|
37
|
+
|
38
|
+
class ClassiqCombinatorialOptimizationError(ClassiqError):
|
39
|
+
pass
|
40
|
+
|
41
|
+
|
42
|
+
class ClassiqOracleError(ClassiqError):
|
43
|
+
pass
|
44
|
+
|
45
|
+
|
46
|
+
class ClassiqAnalyzerError(ClassiqError):
|
47
|
+
pass
|
48
|
+
|
49
|
+
|
50
|
+
class ClassiqAnalyzerVisualizationError(ClassiqError):
|
51
|
+
pass
|
52
|
+
|
53
|
+
|
54
|
+
class ClassiqAPIError(ClassiqError):
|
55
|
+
def __init__(self, message: str, status_code: Optional[int] = None) -> None:
|
56
|
+
self.status_code = status_code
|
57
|
+
super().__init__(message)
|
58
|
+
|
59
|
+
|
60
|
+
class ClassiqVersionError(ClassiqError):
|
61
|
+
pass
|
62
|
+
|
63
|
+
|
64
|
+
class ClassiqValueError(ClassiqError, ValueError):
|
65
|
+
pass
|
66
|
+
|
67
|
+
|
68
|
+
class ClassiqArithmeticError(ClassiqValueError):
|
69
|
+
pass
|
70
|
+
|
71
|
+
|
72
|
+
class ClassiqIndexError(ClassiqError, IndexError):
|
73
|
+
pass
|
74
|
+
|
75
|
+
|
76
|
+
class ClassiqWiringError(ClassiqValueError):
|
77
|
+
pass
|
78
|
+
|
79
|
+
|
80
|
+
class ClassiqControlError(ClassiqError):
|
81
|
+
def __init__(self) -> None:
|
82
|
+
message = "Repeated control names, please rename the control states"
|
83
|
+
super().__init__(message=message)
|
84
|
+
|
85
|
+
|
86
|
+
class ClassiqQRegError(ClassiqValueError):
|
87
|
+
pass
|
88
|
+
|
89
|
+
|
90
|
+
class ClassiqQFuncError(ClassiqValueError):
|
91
|
+
pass
|
92
|
+
|
93
|
+
|
94
|
+
class ClassiqQSVMError(ClassiqValueError):
|
95
|
+
pass
|
96
|
+
|
97
|
+
|
98
|
+
class ClassiqQNNError(ClassiqValueError):
|
99
|
+
pass
|
100
|
+
|
101
|
+
|
102
|
+
class ClassiqTorchError(ClassiqQNNError):
|
103
|
+
pass
|
104
|
+
|
105
|
+
|
106
|
+
class ClassiqChemistryError(ClassiqError):
|
107
|
+
pass
|
108
|
+
|
109
|
+
|
110
|
+
class ClassiqAuthenticationError(ClassiqError):
|
111
|
+
pass
|
112
|
+
|
113
|
+
|
114
|
+
class ClassiqExpiredTokenError(ClassiqAuthenticationError):
|
115
|
+
pass
|
116
|
+
|
117
|
+
|
118
|
+
class ClassiqFileNotFoundError(FileNotFoundError):
|
119
|
+
pass
|
120
|
+
|
121
|
+
|
122
|
+
class ClassiqStateInitializationError(ClassiqError):
|
123
|
+
pass
|
124
|
+
|
125
|
+
|
126
|
+
class ClassiqPasswordManagerSelectionError(ClassiqError):
|
127
|
+
pass
|
128
|
+
|
129
|
+
|
130
|
+
class ClassiqMismatchIOsError(ClassiqError):
|
131
|
+
pass
|
132
|
+
|
133
|
+
|
134
|
+
class ClassiqNotImplementedError(ClassiqError, NotImplementedError):
|
135
|
+
pass
|
136
|
+
|
137
|
+
|
138
|
+
class ClassiqCombOptError(ClassiqError):
|
139
|
+
pass
|
140
|
+
|
141
|
+
|
142
|
+
class ClassiqCombOptNoSolutionError(ClassiqError):
|
143
|
+
|
144
|
+
def __init__(self) -> None:
|
145
|
+
super().__init__("There is no valid solution for this optimization problem.")
|
146
|
+
|
147
|
+
|
148
|
+
class ClassiqCombOptTrivialProblemError(ClassiqError):
|
149
|
+
|
150
|
+
def __init__(self, solution: list[int]) -> None:
|
151
|
+
super().__init__(
|
152
|
+
message=f"The problem doesn't have free decision variables. "
|
153
|
+
f"The trivial solution is {solution}."
|
154
|
+
)
|
155
|
+
|
156
|
+
|
157
|
+
class ClassiqCombOptInvalidEncodingTypeError(ClassiqError):
|
158
|
+
|
159
|
+
def __init__(self, encoding_type: str, valid_types: Iterable[str]) -> None:
|
160
|
+
super().__init__(
|
161
|
+
f"Invalid variable encoding type {encoding_type}. "
|
162
|
+
f"The available encoding types are {list(valid_types)}"
|
163
|
+
)
|
164
|
+
|
165
|
+
|
166
|
+
class ClassiqNonNumericCoefficientInPauliError(ClassiqError):
|
167
|
+
pass
|
168
|
+
|
169
|
+
|
170
|
+
class ClassiqCombOptNotSupportedProblemError(ClassiqCombOptError):
|
171
|
+
pass
|
172
|
+
|
173
|
+
|
174
|
+
class ClassiqExecutorInvalidHamiltonianError(ClassiqCombOptError):
|
175
|
+
|
176
|
+
def __init__(self) -> None:
|
177
|
+
super().__init__("Invalid hamiltonian")
|
178
|
+
|
179
|
+
|
180
|
+
class ClassiqSemanticError(ClassiqError):
|
181
|
+
pass
|
182
|
+
|
183
|
+
|
184
|
+
class ClassiqDeprecationWarning(FutureWarning):
|
185
|
+
pass
|
186
|
+
|
187
|
+
|
188
|
+
class ClassiqExpansionError(ClassiqError):
|
189
|
+
pass
|
190
|
+
|
191
|
+
|
192
|
+
class ClassiqInternalError(ClassiqError):
|
193
|
+
def __init__(self, message: Optional[str] = None) -> None:
|
194
|
+
final_message = "Internal error occurred. Please contact Classiq support."
|
195
|
+
if message is not None:
|
196
|
+
final_message += f"\nError: {message}"
|
197
|
+
super().__init__(final_message)
|
198
|
+
|
199
|
+
|
200
|
+
class ClassiqInternalExpansionError(ClassiqInternalError):
|
201
|
+
pass
|
@@ -0,0 +1,19 @@
|
|
1
|
+
from classiq.interface.helpers.versioned_model import VersionedModel
|
2
|
+
|
3
|
+
|
4
|
+
class IQCCInitAuthData(VersionedModel):
|
5
|
+
auth_scope_id: str
|
6
|
+
auth_method_id: str
|
7
|
+
|
8
|
+
|
9
|
+
class IQCCInitAuthResponse(VersionedModel):
|
10
|
+
auth_url: str
|
11
|
+
token_id: str
|
12
|
+
|
13
|
+
|
14
|
+
class IQCCProbeAuthData(IQCCInitAuthData):
|
15
|
+
token_id: str
|
16
|
+
|
17
|
+
|
18
|
+
class IQCCProbeAuthResponse(VersionedModel):
|
19
|
+
auth_token: str
|
@@ -1,28 +1,31 @@
|
|
1
1
|
from datetime import datetime
|
2
|
-
from typing import
|
2
|
+
from typing import Optional
|
3
3
|
|
4
|
-
from pydantic import BaseModel,
|
4
|
+
from pydantic import BaseModel, Field
|
5
5
|
|
6
|
+
from classiq.interface.executor.execution_request import JobCost
|
6
7
|
from classiq.interface.jobs import JobStatus
|
7
8
|
|
8
9
|
|
9
|
-
class ExecutionJobDetailsV1(BaseModel, extra=
|
10
|
+
class ExecutionJobDetailsV1(BaseModel, extra="ignore"):
|
10
11
|
id: str
|
11
12
|
|
12
|
-
name: Optional[str]
|
13
|
+
name: Optional[str] = None
|
13
14
|
start_time: datetime
|
14
|
-
end_time: Optional[datetime]
|
15
|
+
end_time: Optional[datetime] = None
|
15
16
|
|
16
|
-
provider: Optional[str]
|
17
|
-
backend_name: Optional[str]
|
17
|
+
provider: Optional[str] = None
|
18
|
+
backend_name: Optional[str] = None
|
18
19
|
|
19
20
|
status: JobStatus
|
20
21
|
|
21
|
-
num_shots: Optional[int]
|
22
|
-
program_id: Optional[str]
|
22
|
+
num_shots: Optional[int] = None
|
23
|
+
program_id: Optional[str] = None
|
23
24
|
|
24
|
-
error: Optional[str]
|
25
|
+
error: Optional[str] = None
|
25
26
|
|
27
|
+
cost: Optional[JobCost] = Field(default=None)
|
26
28
|
|
27
|
-
|
28
|
-
|
29
|
+
|
30
|
+
class ExecutionJobsQueryResultsV1(BaseModel, extra="ignore"):
|
31
|
+
results: list[ExecutionJobDetailsV1]
|
@@ -0,0 +1,18 @@
|
|
1
|
+
from typing import Optional
|
2
|
+
|
3
|
+
from pydantic import BaseModel, Field
|
4
|
+
|
5
|
+
from classiq.interface.chemistry.operator import PauliOperator
|
6
|
+
from classiq.interface.executor.quantum_code import Arguments
|
7
|
+
from classiq.interface.helpers.custom_encoders import CUSTOM_ENCODERS
|
8
|
+
|
9
|
+
|
10
|
+
class EstimateInput(BaseModel, json_encoders=CUSTOM_ENCODERS):
|
11
|
+
hamiltonian: PauliOperator
|
12
|
+
parameters: list[Arguments]
|
13
|
+
|
14
|
+
|
15
|
+
class PrimitivesInput(BaseModel, json_encoders=CUSTOM_ENCODERS):
|
16
|
+
sample: Optional[list[Arguments]] = Field(default=None)
|
17
|
+
estimate: Optional[EstimateInput] = Field(default=None)
|
18
|
+
random_seed: Optional[int] = Field(default=None)
|
@@ -0,0 +1 @@
|
|
1
|
+
DEFAULT_RESULT_NAME = "result"
|
@@ -1,7 +1,7 @@
|
|
1
1
|
import pydantic
|
2
2
|
|
3
3
|
from classiq.interface.chemistry.operator import PauliOperators
|
4
|
-
from classiq.interface.executor.
|
4
|
+
from classiq.interface.executor.quantum_code import QuantumCode
|
5
5
|
|
6
6
|
|
7
7
|
class OperatorsEstimation(pydantic.BaseModel):
|
@@ -10,5 +10,5 @@ class OperatorsEstimation(pydantic.BaseModel):
|
|
10
10
|
by a quantum program.
|
11
11
|
"""
|
12
12
|
|
13
|
-
quantum_program:
|
13
|
+
quantum_program: QuantumCode
|
14
14
|
operators: PauliOperators
|