classiq 0.38.0__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 +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.3.dist-info}/METADATA +16 -9
- classiq-0.65.3.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.3.dist-info}/WHEEL +0 -0
@@ -0,0 +1,178 @@
|
|
1
|
+
# This file was generated automatically - do not edit manually
|
2
|
+
|
3
|
+
|
4
|
+
from enum import IntEnum
|
5
|
+
|
6
|
+
|
7
|
+
class Element(IntEnum):
|
8
|
+
H = 0
|
9
|
+
He = 1
|
10
|
+
Li = 2
|
11
|
+
Be = 3
|
12
|
+
B = 4
|
13
|
+
C = 5
|
14
|
+
N = 6
|
15
|
+
O = 7 # noqa: E741
|
16
|
+
F = 8
|
17
|
+
Ne = 9
|
18
|
+
Na = 10
|
19
|
+
Mg = 11
|
20
|
+
Al = 12
|
21
|
+
Si = 13
|
22
|
+
P = 14
|
23
|
+
S = 15
|
24
|
+
Cl = 16
|
25
|
+
Ar = 17
|
26
|
+
K = 18
|
27
|
+
Ca = 19
|
28
|
+
Sc = 20
|
29
|
+
Ti = 21
|
30
|
+
V = 22
|
31
|
+
Cr = 23
|
32
|
+
Mn = 24
|
33
|
+
Fe = 25
|
34
|
+
Co = 26
|
35
|
+
Ni = 27
|
36
|
+
Cu = 28
|
37
|
+
Zn = 29
|
38
|
+
Ga = 30
|
39
|
+
Ge = 31
|
40
|
+
As = 32
|
41
|
+
Se = 33
|
42
|
+
Br = 34
|
43
|
+
Kr = 35
|
44
|
+
Rb = 36
|
45
|
+
Sr = 37
|
46
|
+
Y = 38
|
47
|
+
Zr = 39
|
48
|
+
Nb = 40
|
49
|
+
Mo = 41
|
50
|
+
Tc = 42
|
51
|
+
Ru = 43
|
52
|
+
Rh = 44
|
53
|
+
Pd = 45
|
54
|
+
Ag = 46
|
55
|
+
Cd = 47
|
56
|
+
In = 48
|
57
|
+
Sn = 49
|
58
|
+
Sb = 50
|
59
|
+
Te = 51
|
60
|
+
I = 52 # noqa: E741
|
61
|
+
Xe = 53
|
62
|
+
Cs = 54
|
63
|
+
Ba = 55
|
64
|
+
La = 56
|
65
|
+
Ce = 57
|
66
|
+
Pr = 58
|
67
|
+
Nd = 59
|
68
|
+
Pm = 60
|
69
|
+
Sm = 61
|
70
|
+
Eu = 62
|
71
|
+
Gd = 63
|
72
|
+
Tb = 64
|
73
|
+
Dy = 65
|
74
|
+
Ho = 66
|
75
|
+
Er = 67
|
76
|
+
Tm = 68
|
77
|
+
Yb = 69
|
78
|
+
Lu = 70
|
79
|
+
Hf = 71
|
80
|
+
Ta = 72
|
81
|
+
W = 73
|
82
|
+
Re = 74
|
83
|
+
Os = 75
|
84
|
+
Ir = 76
|
85
|
+
Pt = 77
|
86
|
+
Au = 78
|
87
|
+
Hg = 79
|
88
|
+
Tl = 80
|
89
|
+
Pb = 81
|
90
|
+
Bi = 82
|
91
|
+
Po = 83
|
92
|
+
At = 84
|
93
|
+
Rn = 85
|
94
|
+
Fr = 86
|
95
|
+
Ra = 87
|
96
|
+
Ac = 88
|
97
|
+
Th = 89
|
98
|
+
Pa = 90
|
99
|
+
U = 91
|
100
|
+
Np = 92
|
101
|
+
Pu = 93
|
102
|
+
Am = 94
|
103
|
+
Cm = 95
|
104
|
+
Bk = 96
|
105
|
+
Cf = 97
|
106
|
+
Es = 98
|
107
|
+
Fm = 99
|
108
|
+
Md = 100
|
109
|
+
No = 101
|
110
|
+
Lr = 102
|
111
|
+
Rf = 103
|
112
|
+
Db = 104
|
113
|
+
Sg = 105
|
114
|
+
Bh = 106
|
115
|
+
Hs = 107
|
116
|
+
Mt = 108
|
117
|
+
Ds = 109
|
118
|
+
Rg = 110
|
119
|
+
Cn = 111
|
120
|
+
Nh = 112
|
121
|
+
Fl = 113
|
122
|
+
Mc = 114
|
123
|
+
Lv = 115
|
124
|
+
Ts = 116
|
125
|
+
Og = 117
|
126
|
+
|
127
|
+
|
128
|
+
class FermionMapping(IntEnum):
|
129
|
+
JORDAN_WIGNER = 0
|
130
|
+
PARITY = 1
|
131
|
+
BRAVYI_KITAEV = 2
|
132
|
+
FAST_BRAVYI_KITAEV = 3
|
133
|
+
|
134
|
+
|
135
|
+
class FinanceFunctionType(IntEnum):
|
136
|
+
VAR = 0
|
137
|
+
SHORTFALL = 1
|
138
|
+
X_SQUARE = 2
|
139
|
+
EUROPEAN_CALL_OPTION = 3
|
140
|
+
|
141
|
+
|
142
|
+
class LadderOperator(IntEnum):
|
143
|
+
PLUS = 0
|
144
|
+
MINUS = 1
|
145
|
+
|
146
|
+
|
147
|
+
class Optimizer(IntEnum):
|
148
|
+
COBYLA = 1
|
149
|
+
SPSA = 2
|
150
|
+
L_BFGS_B = 3
|
151
|
+
NELDER_MEAD = 4
|
152
|
+
ADAM = 5
|
153
|
+
|
154
|
+
|
155
|
+
class Pauli(IntEnum):
|
156
|
+
I = 0 # noqa: E741
|
157
|
+
X = 1
|
158
|
+
Y = 2
|
159
|
+
Z = 3
|
160
|
+
|
161
|
+
|
162
|
+
class QSVMFeatureMapEntanglement(IntEnum):
|
163
|
+
FULL = 0
|
164
|
+
LINEAR = 1
|
165
|
+
CIRCULAR = 2
|
166
|
+
SCA = 3
|
167
|
+
PAIRWISE = 4
|
168
|
+
|
169
|
+
|
170
|
+
__all__ = [
|
171
|
+
"Element",
|
172
|
+
"FermionMapping",
|
173
|
+
"FinanceFunctionType",
|
174
|
+
"LadderOperator",
|
175
|
+
"Optimizer",
|
176
|
+
"Pauli",
|
177
|
+
"QSVMFeatureMapEntanglement",
|
178
|
+
]
|
@@ -0,0 +1,54 @@
|
|
1
|
+
from collections import Counter
|
2
|
+
from enum import Enum, EnumMeta, IntEnum
|
3
|
+
|
4
|
+
import pydantic
|
5
|
+
|
6
|
+
from classiq.interface.ast_node import HashableASTNode
|
7
|
+
from classiq.interface.exceptions import ClassiqValueError
|
8
|
+
|
9
|
+
|
10
|
+
class EnumDeclaration(HashableASTNode):
|
11
|
+
name: str
|
12
|
+
|
13
|
+
members: dict[str, int] = pydantic.Field(
|
14
|
+
default_factory=dict,
|
15
|
+
description="Dictionary of member names and their values",
|
16
|
+
)
|
17
|
+
|
18
|
+
@pydantic.field_validator("members")
|
19
|
+
@classmethod
|
20
|
+
def _validate_members(cls, members: dict[str, int]) -> dict[str, int]:
|
21
|
+
underscore_members = [
|
22
|
+
member for member in members.keys() if member.startswith("_")
|
23
|
+
]
|
24
|
+
if len(underscore_members) > 0:
|
25
|
+
raise ClassiqValueError(
|
26
|
+
f"Enum member names must not start with an underscore. The offending "
|
27
|
+
f"members: {underscore_members}"
|
28
|
+
)
|
29
|
+
|
30
|
+
counter = Counter(members.values())
|
31
|
+
repeating_members = [
|
32
|
+
member for member, value in members.items() if counter[value] > 1
|
33
|
+
]
|
34
|
+
if len(repeating_members) > 0:
|
35
|
+
raise ClassiqValueError(
|
36
|
+
f"Cannot assign the same value to more than one enum member. The "
|
37
|
+
f"offending members: {repeating_members}"
|
38
|
+
)
|
39
|
+
|
40
|
+
return members
|
41
|
+
|
42
|
+
def create_enum(self) -> IntEnum:
|
43
|
+
return IntEnum(self.name, self.members)
|
44
|
+
|
45
|
+
|
46
|
+
def declaration_from_enum(enum_type: EnumMeta) -> EnumDeclaration:
|
47
|
+
members: list[Enum] = list(enum_type)
|
48
|
+
return EnumDeclaration(
|
49
|
+
name=enum_type.__name__,
|
50
|
+
members={
|
51
|
+
member.name: member.value
|
52
|
+
for member in sorted(members, key=lambda member: member.value)
|
53
|
+
},
|
54
|
+
)
|
@@ -0,0 +1,18 @@
|
|
1
|
+
from collections.abc import Mapping
|
2
|
+
from typing import TYPE_CHECKING
|
3
|
+
|
4
|
+
import pydantic
|
5
|
+
|
6
|
+
from classiq.interface.ast_node import HashableASTNode
|
7
|
+
|
8
|
+
if TYPE_CHECKING:
|
9
|
+
from classiq.interface.generator.functions.concrete_types import ConcreteQuantumType
|
10
|
+
|
11
|
+
|
12
|
+
class QStructDeclaration(HashableASTNode):
|
13
|
+
name: str
|
14
|
+
|
15
|
+
fields: Mapping[str, "ConcreteQuantumType"] = pydantic.Field(
|
16
|
+
default_factory=dict,
|
17
|
+
description="Dictionary of field names and their quantum types",
|
18
|
+
)
|
@@ -1,25 +1,21 @@
|
|
1
|
-
from
|
1
|
+
from collections.abc import Mapping
|
2
|
+
from typing import Any
|
2
3
|
|
3
4
|
import pydantic
|
4
5
|
|
5
|
-
from classiq.interface.
|
6
|
-
from classiq.interface.
|
7
|
-
|
8
|
-
)
|
6
|
+
from classiq.interface.ast_node import HashableASTNode
|
7
|
+
from classiq.interface.exceptions import ClassiqValueError
|
8
|
+
from classiq.interface.generator.functions.concrete_types import ConcreteClassicalType
|
9
9
|
|
10
|
-
from classiq.exceptions import ClassiqValueError
|
11
10
|
|
12
|
-
|
13
|
-
class StructDeclaration(HashablePydanticBaseModel):
|
11
|
+
class StructDeclaration(HashableASTNode):
|
14
12
|
name: str
|
15
13
|
|
16
|
-
variables:
|
14
|
+
variables: dict[str, ConcreteClassicalType] = pydantic.Field(
|
17
15
|
default_factory=dict,
|
18
16
|
description="Dictionary of variable names and their classical types",
|
19
17
|
)
|
20
18
|
|
21
|
-
BUILTIN_STRUCT_DECLARATIONS: ClassVar[Dict[str, "StructDeclaration"]] = {}
|
22
|
-
|
23
19
|
def validate_fields(self, fields: Mapping[str, Any]) -> None:
|
24
20
|
expected_field_names = list(self.variables.keys())
|
25
21
|
received_field_names = list(fields.keys())
|
@@ -1,7 +1,9 @@
|
|
1
|
-
from
|
1
|
+
from collections.abc import Iterable
|
2
|
+
from typing import Optional
|
2
3
|
|
3
4
|
import pydantic
|
4
5
|
|
6
|
+
from classiq.interface.exceptions import ClassiqValueError
|
5
7
|
from classiq.interface.generator.chemistry_function_params import (
|
6
8
|
ChemistryFunctionParams,
|
7
9
|
)
|
@@ -10,8 +12,6 @@ from classiq.interface.generator.excitations import (
|
|
10
12
|
EXCITATIONS_TYPE_EXACT,
|
11
13
|
)
|
12
14
|
|
13
|
-
from classiq.exceptions import ClassiqValueError
|
14
|
-
|
15
15
|
_EXCITATIONS_DICT = {"s": 1, "d": 2, "t": 3, "q": 4}
|
16
16
|
|
17
17
|
DEFAULT_EXCITATIONS = [1, 2]
|
@@ -42,7 +42,8 @@ class UCC(ChemistryFunctionParams):
|
|
42
42
|
description="Prefix for the generated parameters",
|
43
43
|
)
|
44
44
|
|
45
|
-
@pydantic.
|
45
|
+
@pydantic.field_validator("excitations")
|
46
|
+
@classmethod
|
46
47
|
def _validate_excitations(cls, excitations: EXCITATIONS_TYPE) -> EXCITATIONS_TYPE:
|
47
48
|
if isinstance(excitations, int):
|
48
49
|
if excitations not in _EXCITATIONS_DICT.values():
|
@@ -1,15 +1,14 @@
|
|
1
|
-
from typing import
|
1
|
+
from typing import Union
|
2
2
|
|
3
3
|
import numpy as np
|
4
4
|
import pydantic
|
5
5
|
|
6
|
+
from classiq.interface.exceptions import ClassiqValueError
|
6
7
|
from classiq.interface.generator import complex_type, function_params
|
7
8
|
from classiq.interface.generator.arith.register_user_input import RegisterArithmeticInfo
|
8
9
|
|
9
|
-
from classiq.exceptions import ClassiqValueError
|
10
|
-
|
11
10
|
DataNumber = Union[complex_type.Complex, float, int]
|
12
|
-
DataArray =
|
11
|
+
DataArray = list[list[DataNumber]]
|
13
12
|
|
14
13
|
UNITARY_GATE_INPUT: str = "TARGET"
|
15
14
|
UNITARY_GATE_OUTPUT: str = "TARGET"
|
@@ -26,7 +25,8 @@ class UnitaryGate(function_params.FunctionParams):
|
|
26
25
|
)
|
27
26
|
|
28
27
|
# TODO - decide if to include assertion on the unitarity of the matrix. It is already done in Qiskit and could be computationally expensive
|
29
|
-
@pydantic.
|
28
|
+
@pydantic.field_validator("data")
|
29
|
+
@classmethod
|
30
30
|
def validate_data(cls, data: DataArray) -> DataArray:
|
31
31
|
data_np = np.array(data, dtype=object)
|
32
32
|
if data_np.ndim != 2:
|
@@ -1,6 +1,7 @@
|
|
1
|
-
from
|
1
|
+
from collections.abc import Mapping
|
2
2
|
|
3
3
|
import pydantic
|
4
|
+
from pydantic import ConfigDict
|
4
5
|
|
5
6
|
from classiq.interface.generator.arith.register_user_input import RegisterArithmeticInfo
|
6
7
|
from classiq.interface.generator.function_params import ArithmeticIODict, FunctionParams
|
@@ -11,6 +12,8 @@ class CustomFunction(FunctionParams):
|
|
11
12
|
A user-defined custom function parameters object.
|
12
13
|
"""
|
13
14
|
|
15
|
+
model_config = ConfigDict(frozen=True, extra="forbid")
|
16
|
+
|
14
17
|
_name: str = pydantic.PrivateAttr(default="")
|
15
18
|
|
16
19
|
input_decls: ArithmeticIODict = pydantic.Field(
|
@@ -1,18 +1,18 @@
|
|
1
1
|
from collections import Counter, defaultdict
|
2
|
+
from collections.abc import Collection, Iterable, Mapping
|
2
3
|
from dataclasses import dataclass
|
3
4
|
from itertools import chain
|
4
|
-
from typing import
|
5
|
+
from typing import Optional, TypeVar
|
5
6
|
|
6
7
|
import networkx as nx
|
7
8
|
|
9
|
+
from classiq.interface.exceptions import ClassiqValueError
|
8
10
|
from classiq.interface.generator.quantum_function_call import (
|
9
11
|
SynthesisQuantumFunctionCall,
|
10
12
|
WireName,
|
11
13
|
)
|
12
14
|
from classiq.interface.helpers.custom_pydantic_types import PydanticNonEmptyString
|
13
15
|
|
14
|
-
from classiq.exceptions import ClassiqValueError
|
15
|
-
|
16
16
|
IO_MULTI_USE_ERROR_MSG = "Input and output names can only be used once"
|
17
17
|
UNCONNECTED_WIRES_ERROR_MSG = "Wires connected only on one end"
|
18
18
|
UNCONNECTED_FLOW_IO_ERROR_MSG = "Flow IOs not connected to inner calls"
|
@@ -153,7 +153,7 @@ def validate_legal_wiring(
|
|
153
153
|
raise ClassiqValueError(_join_errors(error_messages))
|
154
154
|
|
155
155
|
|
156
|
-
def _join_errors(error_messages:
|
156
|
+
def _join_errors(error_messages: list[str]) -> str:
|
157
157
|
if not error_messages:
|
158
158
|
error_messages.append(f"{UNKNOWN_ERROR_MSG}")
|
159
159
|
|
@@ -163,7 +163,7 @@ def _join_errors(error_messages: List[str]) -> str:
|
|
163
163
|
T = TypeVar("T")
|
164
164
|
|
165
165
|
|
166
|
-
def _recurring_names(name_list:
|
166
|
+
def _recurring_names(name_list: list[T]) -> Iterable[T]:
|
167
167
|
name_counter = Counter(name_list)
|
168
168
|
return (name for name, appearances in name_counter.items() if appearances > 1)
|
169
169
|
|
@@ -188,11 +188,11 @@ def validate_acyclic_logic_flow(
|
|
188
188
|
|
189
189
|
|
190
190
|
def validate_acyclicity_and_topologically_sort_logic_flow(
|
191
|
-
body:
|
191
|
+
body: list[SynthesisQuantumFunctionCall],
|
192
192
|
*,
|
193
193
|
flow_input_names: Collection[str],
|
194
194
|
flow_output_names: Collection[str],
|
195
|
-
) ->
|
195
|
+
) -> list[SynthesisQuantumFunctionCall]:
|
196
196
|
graph = validate_acyclic_logic_flow(
|
197
197
|
body=body,
|
198
198
|
flow_input_names=flow_input_names,
|
@@ -1,16 +1,16 @@
|
|
1
|
-
from
|
1
|
+
from collections.abc import Iterable, Sequence, Sized
|
2
|
+
from typing import TypeVar
|
2
3
|
|
3
4
|
import numpy as np
|
4
5
|
|
6
|
+
from classiq.interface.exceptions import ClassiqValueError
|
5
7
|
from classiq.interface.helpers.custom_pydantic_types import PydanticProbabilityFloat
|
6
8
|
|
7
|
-
from classiq.exceptions import ClassiqValueError
|
8
|
-
|
9
9
|
NOT_SUM_TO_ONE_ERROR = "Probabilities do not sum to 1"
|
10
10
|
|
11
11
|
SUM_TO_ONE_SENSITIVITY = 8
|
12
12
|
|
13
|
-
Amplitude = TypeVar("Amplitude",
|
13
|
+
Amplitude = TypeVar("Amplitude", tuple[float, ...], list[complex])
|
14
14
|
|
15
15
|
|
16
16
|
def _is_power_of_two(vector: Sized) -> bool:
|
@@ -1,14 +1,10 @@
|
|
1
|
-
from collections import abc
|
1
|
+
from collections import abc, defaultdict
|
2
|
+
from collections.abc import Collection, Mapping, Sequence
|
2
3
|
from typing import (
|
3
4
|
TYPE_CHECKING,
|
4
5
|
Any,
|
5
|
-
|
6
|
-
Dict,
|
7
|
-
List,
|
8
|
-
Mapping,
|
6
|
+
Callable,
|
9
7
|
Optional,
|
10
|
-
Sequence,
|
11
|
-
Tuple,
|
12
8
|
TypeVar,
|
13
9
|
Union,
|
14
10
|
)
|
@@ -21,7 +17,7 @@ NodeType = Union[
|
|
21
17
|
BaseModel,
|
22
18
|
int,
|
23
19
|
bool,
|
24
|
-
|
20
|
+
tuple["NodeType", ...],
|
25
21
|
Mapping[Key, "NodeType"],
|
26
22
|
Sequence["NodeType"],
|
27
23
|
]
|
@@ -47,19 +43,19 @@ class Visitor:
|
|
47
43
|
|
48
44
|
return node
|
49
45
|
|
50
|
-
def visit_list(self, node:
|
46
|
+
def visit_list(self, node: list[NodeType]) -> Optional[RetType]:
|
51
47
|
for elem in node:
|
52
48
|
self.visit(elem)
|
53
49
|
|
54
50
|
return None
|
55
51
|
|
56
|
-
def visit_dict(self, node:
|
52
|
+
def visit_dict(self, node: dict[Key, NodeType]) -> Optional[RetType]:
|
57
53
|
for value in node.values():
|
58
54
|
self.visit(value)
|
59
55
|
|
60
56
|
return None
|
61
57
|
|
62
|
-
def visit_tuple(self, node:
|
58
|
+
def visit_tuple(self, node: tuple[NodeType, ...]) -> Optional[tuple[RetType, ...]]:
|
63
59
|
for value in node:
|
64
60
|
self.visit(value)
|
65
61
|
|
@@ -83,13 +79,24 @@ class Transformer(Visitor):
|
|
83
79
|
|
84
80
|
def visit(self, node: NodeType) -> Any: ...
|
85
81
|
|
86
|
-
def visit_list(self, node:
|
82
|
+
def visit_list(self, node: list[NodeType]) -> list[RetType]:
|
87
83
|
return [self.visit(elem) for elem in node]
|
88
84
|
|
89
|
-
def visit_dict(self, node:
|
85
|
+
def visit_dict(self, node: dict[Key, NodeType]) -> dict[Key, RetType]:
|
90
86
|
return {key: self.visit(value) for key, value in node.items()}
|
91
87
|
|
92
|
-
def
|
88
|
+
def visit_defaultdict(
|
89
|
+
self, node: defaultdict[Key, NodeType]
|
90
|
+
) -> defaultdict[Key, RetType]:
|
91
|
+
new_default_factory: Callable[[], RetType] | None = None
|
92
|
+
if (default_factory := node.default_factory) is not None:
|
93
|
+
|
94
|
+
def new_default_factory() -> RetType:
|
95
|
+
return self.visit(default_factory()) # type: ignore[misc]
|
96
|
+
|
97
|
+
return defaultdict(new_default_factory, self.visit_dict(node))
|
98
|
+
|
99
|
+
def visit_tuple(self, node: tuple[NodeType, ...]) -> tuple[RetType, ...]:
|
93
100
|
return tuple(self.visit(value) for value in node)
|
94
101
|
|
95
102
|
def visit_BaseModel(
|
@@ -97,12 +104,12 @@ class Transformer(Visitor):
|
|
97
104
|
) -> RetType:
|
98
105
|
fields_to_skip = fields_to_skip or set()
|
99
106
|
|
100
|
-
result:
|
107
|
+
result: dict[str, Any] = dict()
|
101
108
|
for name, value in node:
|
102
109
|
if name not in fields_to_skip:
|
103
110
|
result[name] = self.visit(value)
|
104
111
|
|
105
|
-
return node.
|
112
|
+
return node.model_copy(update=result)
|
106
113
|
|
107
114
|
def visit_int(self, n: int) -> int:
|
108
115
|
return n
|
classiq/interface/hardware.py
CHANGED
@@ -1,12 +1,27 @@
|
|
1
1
|
import datetime
|
2
|
-
from typing import TYPE_CHECKING,
|
2
|
+
from typing import TYPE_CHECKING, Annotated, Optional
|
3
3
|
|
4
4
|
import pydantic
|
5
5
|
|
6
|
-
from classiq.
|
6
|
+
from classiq.interface.enum_utils import StrEnum
|
7
|
+
|
8
|
+
QueueTime = Annotated[
|
9
|
+
Optional[datetime.timedelta],
|
10
|
+
pydantic.PlainSerializer(
|
11
|
+
lambda _timedelta: (
|
12
|
+
_timedelta.total_seconds() if _timedelta is not None else None
|
13
|
+
),
|
14
|
+
return_type=Optional[float],
|
15
|
+
),
|
16
|
+
]
|
7
17
|
|
8
18
|
|
9
19
|
class Provider(StrEnum):
|
20
|
+
"""
|
21
|
+
This class defines all Providers that Classiq supports.
|
22
|
+
This is mainly used in backend_preferences when specifying where do we want to execute the defined model.
|
23
|
+
"""
|
24
|
+
|
10
25
|
IBM_QUANTUM = "IBM Quantum"
|
11
26
|
AZURE_QUANTUM = "Azure Quantum"
|
12
27
|
AMAZON_BRAKET = "Amazon Braket"
|
@@ -15,6 +30,9 @@ class Provider(StrEnum):
|
|
15
30
|
GOOGLE = "Google"
|
16
31
|
ALICE_AND_BOB = "Alice & Bob"
|
17
32
|
OQC = "OQC"
|
33
|
+
INTEL = "Intel"
|
34
|
+
AQT = "AQT"
|
35
|
+
IQCC = "IQCC"
|
18
36
|
|
19
37
|
@property
|
20
38
|
def id(self) -> "ProviderIDEnum":
|
@@ -48,14 +66,17 @@ class HardwareStatus(pydantic.BaseModel):
|
|
48
66
|
default_factory=lambda: datetime.datetime.now(tz=datetime.UTC)
|
49
67
|
)
|
50
68
|
availability: AvailabilityStatus
|
51
|
-
queue_time:
|
52
|
-
|
69
|
+
queue_time: QueueTime = pydantic.Field(
|
70
|
+
default=None,
|
71
|
+
description="The estimated queue time for the hardware in seconds.",
|
72
|
+
)
|
73
|
+
pending_jobs: Optional[int] = None
|
53
74
|
|
54
75
|
|
55
76
|
if TYPE_CHECKING:
|
56
|
-
ConnectivityMapEntry =
|
77
|
+
ConnectivityMapEntry = tuple[int, int]
|
57
78
|
else:
|
58
|
-
ConnectivityMapEntry =
|
79
|
+
ConnectivityMapEntry = list[int]
|
59
80
|
|
60
81
|
|
61
82
|
class HardwareInformation(pydantic.BaseModel):
|
@@ -65,8 +86,8 @@ class HardwareInformation(pydantic.BaseModel):
|
|
65
86
|
display_name: str
|
66
87
|
device_type: DeviceType
|
67
88
|
number_of_qubits: int
|
68
|
-
connectivity_map: Optional[
|
69
|
-
basis_gates:
|
89
|
+
connectivity_map: Optional[list[ConnectivityMapEntry]] = None
|
90
|
+
basis_gates: list[str]
|
70
91
|
status: HardwareStatus
|
71
92
|
|
72
93
|
def is_simulator(self) -> bool:
|
@@ -1,3 +1,3 @@
|
|
1
|
-
from typing import Any, Callable
|
1
|
+
from typing import Any, Callable
|
2
2
|
|
3
|
-
CUSTOM_ENCODERS:
|
3
|
+
CUSTOM_ENCODERS: dict[type, Callable[[Any], Any]] = {complex: str}
|